1. 属性readwrite,readonly,assign,retain,weak,strong,copy,nonatomic ,atomic的作用,使用情况及注意点
(1).readwrite 特性:可读可写; 情况:生成getter、setter方法;【注】:若没有成员变量会直接创建;
(2).readonly 特性:只读,不会生成setter方法;情况:不让属性在类外变化;【注】:只会生成getter方法;
(3).assign 特性:赋值,setter方法将传入的参数赋值给实例变量;情况:仅仅设置变量;【注】:在MRC模式下assign修饰的(指针)对象释放后,改指针仍指向原来的地方。而在ARC模式下功能与之类似的weak指向的对象释放后,改指针会自动置为nil;
(4).retain 特性:持有,setter方法 将传入参数先保留,再赋值;情况:传入参数的retaincount会+1; 【注】:原则上在ARC模式下是assign与retain不能使用的,但是编译器放宽了要求(写了也没关系),ARC模式中与retain功能几乎相同的属性修饰是strong(强引用);
(5).copy 特性:赋值,setter方法将传入对象复制一份,情况:一般只用于修饰NSString;
(6).nonatomic 特性:非原子操作,决定编译器生成的setter,getter是否是原子操作 ;情况:提高效率;
(7).atomic 特性:原子操作,提供多线程安全,防止线程在未完成时被其它线程读取(会造成数据错误);情况:不能被打断的操作 【注】:一般使用nonatomic;
2.NSInteger 不是NSNumber/NSObject的子类,是基本数据类型(是int/long的别名),它会根据系统是32位还是64位来决定本身是int还是long。
3.通知与协议的区别
协议可以按生活中的理解看成一对多,但是它有控制链的关系,通知是没有的。boss的工作代理是不通的员工,各个员工为boss工作,boss要给各个员工发工资;是不能把Cat的工资发给Dog,(就不是一类嘛)
通知可以一对多,一条消息发给多个接收者,比如财务通知:公司员工请于XX号XX点到XX领取薪资条。通知只关心发出通知。