1、copy和strong?nsstring用什么修饰?nsmutableary用什么修饰?
(1).strong表示指向并拥有该对象。其修饰的对象引用计数会增加1。该对象只要引用计数不为0则不会被销毁。当然强行将其设为nil可以销毁它。
(2).weak表示指向但不拥有该对象。其修饰的对象引用计数不会增加。无需手动设置,该对象会自行在内存中销毁。
(3).assign主要用于修饰基本数据类型,如NSInteger和CGFloat,这些数值主要存在于栈上。
(4).weak 一般用来修饰对象,assign一般用来修饰基本数据类型。原因是assign修饰的对象被释放后,指针的地址依然存在,造成野指针,在堆上容易造成崩溃。而栈上的内存系统会自动处理,不会造成野指针。
(5). copy与strong类似。不同之处是strong的复制是多个指针指向同一个地址,而copy的复制每次会在内存中拷贝一份对象,指针指向不同地址。copy一般用在修饰有可变对应类型的不可变对象上,如NSString, NSArray, NSDictionary。
1.copy是不能用来修饰可变对象的,如:NSMutableString、NSMutableArray、NSMutableDictionary。使用copy之后这些实例对象就变成了不可变对象,如果进行增、删、改的操作就会报错。
2.strong不适合用来修饰不可变对象,如:NSString、NSArray、NSDictionary。使用strong之后这些实例对象被赋值之后由于没有生成新的对象,很可能随着赋值对象的改变而改变。
2、isa指针存储了什么?
3、观察者模式都有哪些抽象类?
观察者模式的优点:观察者和被观察者是抽象耦合的。建立一套触发机制。
观察者模式的缺点:如果一个被观察者对象有很多的直接和间接的观察者的话,将所有的观察者都通知到会花费很多时间。如果在观察者和观察目标之间有循环依赖的话,观察目标会触发它们之间进行循环调用,可能导致系统崩溃。观察者模式没有相应的机制让观察者知道所观察的目标对象是怎么发生变化的,而仅仅只是知道观察目标发生了变化。
通知类是 NSNotification(用于通知对象)、NSNotificationCenter(发布通知和添加观察者)、NSNotificationQueue(将通知入队)
Key-Value Observer
键值观察是一种机制,它允许对象在其他对象的特定属性发生更改时得到通知。它基于<NSKeyValueObserving>非正式协议。观察到的属性可以是简单的属性、一对一关系或一对多关系。在模型-视图-控制器模式的上下文中,键值观察尤其重要,因为它使视图对象能够通过控制器层观察模型对象的变化。因此,它是 Cocoa 的重要组成部分绑定技术。
网友评论