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];)