Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/104.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
iOS非arc:当self.property=[[Obj alloc]init]时是否应该使用自动释放?_Ios_Objective C - Fatal编程技术网

iOS非arc:当self.property=[[Obj alloc]init]时是否应该使用自动释放?

iOS非arc:当self.property=[[Obj alloc]init]时是否应该使用自动释放?,ios,objective-c,Ios,Objective C,如果我拥有以下财产: @property (nonatomic, retain) MyObject *theObject; 那么,如果我想创建一个新的MyObject,我是否: self.theObject = [[MyObject alloc] init]; 或: 你必须使用自动释放。如果不这样做,对象的释放计数将为两(一个来自alloc,一个来自setter的retain),因此当属性未设置时,它将泄漏 这仅适用于强属性、保留属性和复制属性。Assigned和weak属性应该只分配一个a

如果我拥有以下财产:

@property (nonatomic, retain) MyObject *theObject;
那么,如果我想创建一个新的MyObject,我是否:

self.theObject = [[MyObject alloc] init];
或:


你必须使用自动释放。如果不这样做,对象的释放计数将为两(一个来自
alloc
,一个来自setter的
retain
),因此当属性未设置时,它将泄漏


这仅适用于强属性、保留属性和复制属性。Assigned和weak属性应该只分配一个alloc inited对象,因为它们不会改变其引用计数。

您必须使用autorelease。如果不这样做,对象的释放计数将为两(一个来自
alloc
,一个来自setter的
retain
),因此当属性未设置时,它将泄漏


这仅适用于强属性、保留属性和复制属性。赋值属性和弱属性应该只分配一个alloc inited对象,因为它们不会改变其引用计数。

如果必须的话-第二个

如果正在使用生成的setter,则已将其标记为
retain
。这意味着存储在该属性中的值将为您保留,因此您不需要将其传递给拥有的对象


因为它是保留的,所以您需要在dealloc中释放它。

如果必须的话-第二个

如果正在使用生成的setter,则已将其标记为
retain
。这意味着存储在该属性中的值将为您保留,因此您不需要将其传递给拥有的对象


因为它是保留的,所以您需要在您的dealloc中释放它。

有什么特别的原因您不能使用ARC吗?@Fogmeister也许他想知道他在做什么……也许,但如果可能的话,我会一直坚持使用ARC。正在检查它是否是必需的。@Fogmeister或向后兼容性。或者别的什么。如果有人想使用MRC,至少不要泄气。我是在哪一点上泄气的?我只是问是否有特别的理由使用它。天哪。有什么特别的原因不能使用ARC吗?@Fogmeister也许他想知道他在做什么……也许,但如果可能的话,我会一直坚持使用ARC。正在检查它是否是必需的。@Fogmeister或向后兼容性。或者别的什么。如果有人想使用MRC,至少不要泄气。我是在哪一点上泄气的?我只是问是否有特别的理由使用它。天哪,不公正的、不需要动脑筋的否决票有什么理由吗???这个答案在技术上并不错误。如果您alloc、init和assign到一个非保留指针(不仅仅是属性,可以是本地、静态或全局变量),您必须使用autorelease或手动释放对象,然后才能覆盖指针。@Minthos,但在赋值时不能!这就是问题所在。不接触refcount的访问器不会改变其他内存管理规则…有没有任何不公正的、无脑的否决投票的原因???这个答案在技术上并不错误。如果您alloc、init和assign到一个非保留指针(不仅仅是属性,可以是本地、静态或全局变量),您必须使用autorelease或手动释放对象,然后才能覆盖指针。@Minthos,但在赋值时不能!这就是问题所在。不接触refcount的访问器不会更改其他内存管理规则。。。
self.theObject = [[[MyObject alloc] init] autorelease];