File tree Expand file tree Collapse file tree 1 file changed +3
-1
lines changed Expand file tree Collapse file tree 1 file changed +3
-1
lines changed Original file line number Diff line number Diff line change @@ -500,6 +500,8 @@ self.mutableArray = array;
500500
501501> runtime 对注册的类, 会进行布局,对于 weak 对象会放入一个 hash 表中。 用 weak 指向的对象内存地址作为 key,当此对象的引用计数为0的时候会 dealloc,假如 weak 指向的对象内存地址是a,那么就会以a为键, 在这个 weak 表中搜索,找到所有以a为键的 weak 对象,从而设置为 nil。
502502
503+ 代码实现参考 [ ` objc4/objc4-647/runtime/objc-weak.mm ` ] ( https://opensource.apple.com/source/objc4/objc4-647/runtime/objc-weak.mm )
504+
503505(注:在下文的《使用runtime Associate方法关联的对象,需要在主对象dealloc的时候释放么?》里给出的“对象的内存销毁时间表”也提到` __weak ` 引用的解除时间。)
504506
505507在 ARC 出现之前,weak 并没有自动清空引用的特性。可以参考 [ ` MAZeroingWeakRef ` ] ( https://github.com/mikeash/MAZeroingWeakRef/ ) 的实现。
@@ -560,7 +562,7 @@ self.mutableArray = array;
560562
561563 1. @property有两个对应的词,一个是 @synthesize,一个是 @dynamic。如果 @synthesize和 @dynamic都没写,那么默认的就是`@syntheszie var = _var;`
562564 2. @synthesize 的语义是如果你没有手动实现 setter 方法和 getter 方法,那么编译器会自动为你加上这两个方法。
563- 3. @dynamic 告诉编译器:属性的 setter 与 getter 方法由用户自己实现,不自动生成。(当然对于 readonly 的属性只需提供 getter 即可)。假如一个属性被声明为 @dynamic var,然后你没有提供 @setter方法和 @getter 方法,编译的时候没问题,但是当程序运行到 `instance.var = someVar`,由于缺 setter 方法会导致程序崩溃;或者当运行到 `someVar = var` 时,由于缺 getter 方法同样会导致崩溃。编译时没问题,运行时才执行相应的方法,这就是所谓的动态绑定 。
565+ 3. @dynamic 告诉编译器:属性的 setter 与 getter 方法由用户自己实现,不自动生成,也不用自动生成对应的实例变量 。(当然对于 readonly 的属性只需提供 getter 即可)。假如一个属性被声明为 @dynamic var,然后你没有提供 @setter方法和 @getter 方法,编译的时候没问题,但是当程序运行到 `instance.var = someVar`,由于缺 setter 方法会导致程序崩溃;或者当运行到 `someVar = var` 时,由于缺 getter 方法同样会导致崩溃。参考 [Dynamic Method Resolution](https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtDynamicResolution.html) 。
564566
565567###12. ARC下,不显式指定任何属性关键字时,默认的关键字都有哪些?
566568
You can’t perform that action at this time.
0 commit comments