Objective c 在目标C中为弱属性创建自定义setter的正确方法是什么?
如果我声明这样的属性:Objective c 在目标C中为弱属性创建自定义setter的正确方法是什么?,objective-c,properties,automatic-ref-counting,Objective C,Properties,Automatic Ref Counting,如果我声明这样的属性: @property(nonatomic,weak) Foo *someProperty; 然后我声明一个自定义设置器,如下所示: - (void)setSomeProperty:(Foo *)someProp { _someProperty = someProp; //...more custom stuff } 这有什么问题吗?也就是说,编译器应该自动合成带有弱修饰符的_somepropertyivar,所以只需在setter中进行赋值就足够了,对吗
@property(nonatomic,weak) Foo *someProperty;
然后我声明一个自定义设置器,如下所示:
- (void)setSomeProperty:(Foo *)someProp {
_someProperty = someProp;
//...more custom stuff
}
这有什么问题吗?也就是说,编译器应该自动合成带有弱修饰符的_somepropertyivar,所以只需在setter中进行赋值就足够了,对吗?是的,这就是它的全部内容。当然,如果您想要的不是
\u someProperty
之类的东西,您可以指定自定义iVar:
@synthesize someProperty = someProperty_;
非常感谢!因此,据我所知,如果您在ARC中编写自定义setter,您唯一需要担心“覆盖”属性声明上的属性的时候就是使用atomic声明属性(在这种情况下,您需要围绕设置iVar进行@synchronize)和复制(在这种情况下,赋值语句看起来像_someProperty=[someProp copy];)