一、通知(NSNotification)
- 使用观察者模式来实现的用于跨层传递信息的机制。传递方式是一对多的。 如果实现通知机制?
- 应用服务提供商从服务器端把要发送的消息和设备令牌(device token)发送给苹果的消息推送服务器
APNs。 APNs根据设备令牌在已注册的设备(iPhone、iPad、iTouch、mac等)查找对应的设备,将消息发送给相应的设备。- 客户端设备接将接收到的消息传递给相应的应用程序,应用程序根据用户设置弹出通知消息。
二、属性关键字
- 读写权限:
readonly、readwrite(默认) - 原子性:
atomic(默认),nonatomic。atomic读写线程安全,但效率低,而且不是绝对的安全,比如如果修饰的是数组,那么对数组的读写是安全的,但如果是操作数组进行添加移除其中对象的还,就不保证安全 了。 - 引用计数:
retain/strongassign:修饰基本数据类型,修饰对象类型时,不改变其引用计数,会产生悬垂指针,修饰的对象在被释放后,assign指针仍然指向原对象内存地址,如果使用assign指针继续访问原对象的话,就可能会导致内存泄漏或程序异常weak:不改变被修饰对象的引用计数,所指对象在被释放后,weak指针会自动置为nilcopy:分为深拷贝和浅拷贝 浅拷贝:对内存地址的复制,让目标对象指针和原对象指向同一片内存空间会增加引用计数 深拷贝:对对象内容的复制,开辟新的内存空间
可变对象的 copy 和 都是深拷贝 不可变对象的 copy 是浅拷贝, 是深拷贝 copy 方法返回的都是不可变对象
@property (nonatomic, copy) NSMutableArray * array;
这样写有什么影响?
因为 copy 方法返回的都是不可变对象,所以 array 对象实际上是不可变的,如果对其进行可变操 作如添加移除对象,则会造成程序 crash