@property(保留)做什么?

Dan*_*ani 0 objective-c retain

@propert(保留)做什么?它实际上并没有通过我的测试保留我的对象:

id obj = getObjectSomehow();
NSLog(@"%d", [obj retainCount]);
propertyWithRetain = obj;
NSLog(@"%d", [obj retainCount]);

// output:
// 1
// 1
Run Code Online (Sandbox Code Playgroud)

如何创建一个真正保留对象的属性?

dea*_*rne 5

你没有在那里使用你的财产,这就是为什么它不保留!

试试这个 :

id obj = getObjectSomehow();
NSLog(@"%d", [obj retainCount]);
self.propertyWithRetain = obj; // Note the self. :)
NSLog(@"%d", [obj retainCount]);
Run Code Online (Sandbox Code Playgroud)

使用self.将使用该属性.只使用变量名称不会.


特别为@bbum编辑(他在评论中提出了非常公平的观点)

不要依赖使用retainCount - 你不知道还有什么保留了你的对象,你不知道其中一些保留是否实际上是预定的自动释放,所以它通常是一个误导性的数字:)