Mat*_*jca 24 memory-management objective-c declared-property
我注意到Apple的一些示例包括属性上的a retain和readonly修饰符.retain如果在我们使用readonly修饰符时没有生成setter ,那么包括什么呢?
示例:@property (retain, readonly) NSString *title;来自AnimatedTableView示例.
bbu*_*bum 36
或者,更具体地说,(readonly,retain)启用这样的模式:
foo.h中:
@interface StuffHolder:NSObject
@property(readonly, retain) MyStuff *stuff;
@end
Run Code Online (Sandbox Code Playgroud)
Foo.m:
@interface StuffHolder()
@property(readwrite, retain) MyStuff *stuff;
@end
@implementation StuffHolder
@synthesize stuff;
@end
Run Code Online (Sandbox Code Playgroud)
最终结果是在实现中进行readwrite时公开只读的属性,并且编译器自动合成setter和getter.
在类扩展中没有(readwrite,retain)覆盖的情况下可能会产生警告- 类似于statement without an effect- 但它会比有益的更令人困惑.在组合中还有一大堆不同的边缘情况,这些情况同样需要警告,但并不能真正指出实际问题.为了简单起见,决定在很大程度上接受各种模式而没有抱怨(因为它们不是正确性问题).
Chu*_*uck 17
您可以在类扩展中包含第二个私有readwrite声明.所有参考文献的内存管理方案都需要与IIRC匹配,因此您会感到像"只读,保留"这样的愚蠢.