52个编写高质量iOS有效方法(1-10)

2016年就这么过去了,只能说时间过的太快。这一年经历的不少,被迫换了一家公司。新公司感觉氛围还可以,只是技术比较low,所以只能算是一个暂时的工作地点,17年会尝试去一些技术比较牛的地方看看。看过的技术文章也不少,接触的新技术也很多,但是回过头来发现留下来的并不多。接下来会好好整理一下基础的知识,算是自己梳理一下吧,夯实基础才能有更大的发展。

1.开篇第一条并没有实质性的建议,只是告诉我们oc是基于c写的,完美的兼容了c,runtime使得oc具备了c语言所不具备的动态性。也就是动态绑定特性。oc是基于消息机制的,对象调用一个方法,不是再编译期间与对应的对象进行绑定,而是在运行的时候进行消息转发,进而找到对应的函数内存地址然后去执行。

2.第二条算是一个代码规范吧,再.h文件中如果要使用其他类,这时候不要使用#import 改用@class。记住就可以了。这种方式叫做前向引用,可以加快编译速度,避免不必要的导入

3.多用字面值常量,少用与之对应的方法。也算是代码规范。

ok:NSString * str = @"nihao";
no:NSString * str = [NSString stringWithFormat:@"%@",@"nihao"];

4.多用类型常量,少用#define预处理命令,也算是编码规范吧

#define Message @"nihao"
等价于
static NSString * const Message = @"nihao";

这里需要注意一个知识点,那就是static修饰的变量,标识当前的文件可用,外部的文件无法使用。const表示的是一个初始化之后便无法再更改值的常量。
还有一点需要注意的就是,如果你想声明一个全局符号,也就是在别的地方也可以不声明就使用,可以按照下面的写法

.h 文件
extern NSString * const userName ;
.m文件
NSString * const userName = @"haha";

这样在其他文件中,只需要导入包含userName的头文件,就可以直接使用这个值了。

5.枚举类型来标识状态码,还推荐使用移位操作符,加上异或操作来指定对应的值。感觉并没有什么卵用,按照自己的习惯来就好。

6.属性修饰符,顺带讲了一些属性合成。

@property (nonamitic, strong) NSString * userName;
等价于
@synthesis userName  = _userName;
- (void) setuserName:(NSString *)userName;
- (NSString *)userName;

@synthesis 标识的是希望编译器帮我们自动合成set方法与get方法,如果不希望编译器帮我们自动合成,那么可以使用@dynamic。但是千万要注意,如果使用了@dynamic但是又没有实现get与set方法,那么在编译阶段是不会报错的。但是在运行的时候会crash。
然后又讲了一些属性修饰符,搞不懂为什么面试的时候爱问这些东西。

  • nonatomic 标识的是不会保证该属性的线程安全性。atomic标识的是该属性具备线程安全的特性。如果使用atomic那么会消耗一定的存取性能,慎用。如果一定要对某个属性做加锁操作,有很多的其他选择,使用atomic也并不是很靠谱。比如信号量,NSLock等等,有一篇博客分析了各种锁性能:http://www.jianshu.com/p/1e59f0970bf5
  • 读写权限。readwrite是默认的读写权限,也就是可读可写,编译器会自动生成set与get方法。readonly表示的是只读。这个的用处是如果我们想将一个变量作为一个类的私有变量(当然了,oc中不可能有绝对的私有变量,因为有kvc还有runtime啊,简直666),可以再这个类的头文件中声明成readonly,但是再.m文件中声明成readwrite
  • assign 只使用与非object类型,比如int float bool等等
  • stong arc中标识强引用,会对引用计数加1的修饰符,为这种属性赋值的时候会先保留新值,然后释放掉旧值,然后再重新赋值
  • weak arc中标识的弱引用,苹果爸爸为了防止野指针在内存中保存了一个weak表,表的键就是这个属性的内存地址,表的值就是这个属性的值。当这个弱引用的地址被回收的时候,系统会找到这块属性内存地址对应的属性值并把它值为nil,这样给nil发消息就不会崩溃了。
  • unsafe_unretained 使用于对象类型,但是有一个问题是如果目标对象销毁了,那么属性值不会自动设置为nil,那么就野指针了,那么就崩了啊,跪了
  • copy修饰符 跟strong修饰符 区别就是 copy不会保留新值,而是讲原来的值copy一份,保持其不变性。

7.比较简单了,说了那么多,只记住这些就可以。一个类的内部对属性值设置的时候使用set方法,取值的时候直接去属性值即可,避免调用其get方法,减少了消息转发带来的延迟,对性能有那么一丢丢的提升。

例如:
self.userName = @"haha";
self.label.text = _userName;

还有一个需要注意的啊 ,如果你对一个属性使用了懒加载,千万不要直接下划线取值啊,因为那样的话就永远都取不到了,需要使用对应的get方法

8.记住一个概念,如果两个对象isEqual函数返回的是相等,那么两个对象调用hash返回的一定也是相同的。如果hash返回的是相同的,这时候isEqual不一定相等啊,切记。如果想比较两个对象的属性值是否是相同的,可以直接重写isequal方法,里面的东西你想怎么写就怎么写咯。

9.类簇的概念 类似于工厂设计模式了。我传一个类型进去,就会创建出一个继承自基类的对象。在抽象父类中声明了很多子类可以要去重新实现的方法,注意:只是声明,并没有去实现,子类会去实现这些个方法。这样做的好处呢,就是吧公共的方法暴露出来,里面的实现对用户封闭,很好的封装性

10.关联对象的概念,也就是我们常说的给分类添加属性。分类中可以添加方法,协议等等。唯独不能添加属性,因为对象的内存布局再编译期间决定了,对象的ivarsize那时候已经确定了,无法再扩大。以下是几种常用的关联类型:

OBJC_ASSOCIATION_ASSIGN   assign
OBJC_ASSOCIATION_RETAIN_NONATOMIC nonatomic,retain
OBJC_ASSOCIATION_COPY_NONATOMIC nonatomic,copy
OBJC_ASSOCIATION_RETAIN retain
OBJC_ASSOCIATION_COPY copy

其实可以吧关联对象理解为一个字典,一个隶属于对象的字典,我可以往字典中塞model以及其对应的值,也可以从里面拿出来对应的值。这样就比较好理解了

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容