Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 合成ivar的保留语义是什么?_Objective C_Memory Management_Properties_Automatic Ref Counting_Llvm - Fatal编程技术网

Objective c 合成ivar的保留语义是什么?

Objective c 合成ivar的保留语义是什么?,objective-c,memory-management,properties,automatic-ref-counting,llvm,Objective C,Memory Management,Properties,Automatic Ref Counting,Llvm,当您创建属性并且编译器自动合成基础ivar时,ivar是否具有与属性相同的保留语义,或者保留语义是否仅适用于“setter” 检查问题。假设您使用的是ARC,那么底层变量似乎与属性具有相同的语义。您可以将setter重写为如下强属性: - (void)setMyObject:(MyObject *)anObject { _myObject = anObject; } 这意味着您不必在之前释放(如在非ARC中),因为ARC在ivar级别处理此操作(请参阅) 但是,如果不使用ARC(例如as

当您创建属性并且编译器自动合成基础ivar时,ivar是否具有与属性相同的保留语义,或者保留语义是否仅适用于“setter”

检查问题。假设您使用的是ARC,那么底层变量似乎与属性具有相同的语义。您可以将setter重写为如下强属性:

- (void)setMyObject:(MyObject *)anObject
{
   _myObject = anObject;
}
这意味着您不必在之前释放(如在非ARC中),因为ARC在ivar级别处理此操作(请参阅)


但是,如果不使用ARC(例如assign和retain)仅对属性无效,则这不是事实。

这是否也意味着具有复制语义的直接ivar分配实际上会进行复制?例如:
@property(非原子,复制)NSString*myString
自定义setter看起来像
if(\u myString==nil)\u myString=@“A”;返回我的字符串
Hmm它看起来很奇怪(特别是setter的return语句),但是不,您需要显式地复制它。ARC处理保留计数,而不是复制操作。我的错误。Return语句不应该出现在那里。
- (void)setMyObject:(MyObject *)anObject
{
   _myObject = anObject;
}