开发者

Why does a declared property use both retain and readonly?

开发者 https://www.devze.com 2022-12-14 22:27 出处:网络
I\'ve noticed that some of Apple\'s examples include both a retain and readonly modifier on properties. What\'s the point of including retain if no setter gets generated when we\'re using the readonly

I've noticed that some of Apple's examples include both a retain and readonly modifier on properties. What's the point of including retain if no setter gets generated when we're using the readonly modifier?

Exam开发者_C百科ple: @property (retain, readonly) NSString *title; from the AnimatedTableView sample.


Or, more specifically, (readonly, retain) enables a pattern like this:

Foo.h:

@interface StuffHolder:NSObject
@property(readonly, retain) MyStuff *stuff;
@end

Foo.m:

@interface StuffHolder()
@property(readwrite, retain) MyStuff *stuff;
@end

@implementation StuffHolder
@synthesize stuff;
@end

The end result is a property that is publicly readonly while being readwrite within the implementation and for whom both setter and getter are synthesized automatically by the compiler.

A warning could be generated in the case of no (readwrite, retain) override in the class extension -- something akin to statement without an effect -- but it would be more confusing than beneficial. There are also a whole slew of different edge cases across the combinations that would equally warrant a warning, but don't really indicate an actual problem. The decision was made to largely accept the various patterns without complaint for simplicity's sake (since they aren't correctness issues).


You can include a second, private readwrite declaration in a class extension. The memory management scheme for all references needs to match IIRC, so you get silliness like "readonly, retain".

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号