关于IOS如何在类方法里使用全局变量

开发过程中,我们经常会定义一些工具类,分类等,这些方法调用方便,代码简洁,开发起来省事省力,但是也会遇到一些问题,有些类方法中必须使用变量来保存一些东西,这时候就遇到难题了,因为经常使用的属性变量是属于对象的,必须有实际的对象才能调用变量,而类方法是不创建对象而直接调用方法的。这时候我们需要另一种变量去保存数据,就是全局变量。

  • static修饰的全局变量是可以使用的

   static NSMutableDictionary *_soundIDs;

    + (void)initialize
     {
         _soundIDs = [NSMutableDictionary dictionary];
    }

    //  + (NSMutableDictionary *)soundIDs
    //  {
    //    if (_soundIDs == nil) {
    //        _soundIDs = [NSMutableDictionary dictionary];
    //    }
    //    
    //    return _soundIDs;
    //   }
  • initialize 是第一次使用的时候直接执行的,也可以使用类方法来懒加载static静态变量,这样在代码中就可以使用这个变量了。
     + (void)playSoundWithSoundname:(NSString *)soundname
{
    // 1.定义SystemSoundID
    SystemSoundID soundID = 0;
    
    // 2.从字典中取出对应soundID,如果取出是nil,表示之前没有存放在字典
    soundID = [_soundIDs[soundname] unsignedIntValue];
    if (soundID == 0) {
        CFURLRef url = (__bridge CFURLRef)[[NSBundle mainBundle] URLForResource:soundname withExtension:nil];
        AudioServicesCreateSystemSoundID(url, &soundID);
        
        // 将soundID存入字典
        [_soundIDs setObject:@(soundID) forKey:soundname];
    }
    
    // 3.播放音效
    AudioServicesPlaySystemSound(soundID);
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 1,841评论 0 9
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,817评论 18 399
  • 一、深复制和浅复制的区别? 1、浅复制:只是复制了指向对象的指针,即两个指针指向同一块内存单元!而不复制指向对象的...
    iOS_Alex阅读 1,463评论 1 27
  • 重点掌握 3 类对象和方法 对象就是一个物体 类的独特存在就是一个实例,对实例进行操作叫做方法。方法可以应用于类或...
    Coder大雄阅读 1,288评论 0 2
  • 去年夏天于一屋前。 黑,白,素,静。
    车鲶鱼阅读 135评论 0 1