Why does a declared property use both retain and readonly?

前端 未结 2 945
闹比i
闹比i 2021-01-31 09:56

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

相关标签:
2条回答
  • 2021-01-31 10:41

    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).

    0 讨论(0)
  • 2021-01-31 10:42

    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 讨论(0)
提交回复
热议问题