Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/116.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
Iphone @属性-内存管理_Iphone_Ios_Memory Management_Properties - Fatal编程技术网

Iphone @属性-内存管理

Iphone @属性-内存管理,iphone,ios,memory-management,properties,Iphone,Ios,Memory Management,Properties,关于内存管理,这段代码可以吗 @property (nonatomic, retain) id object; ... id anObject = [[Object alloc] init]; self.object = anObject; id otherObject = [[Object alloc] init]; self.object = otherObject; 谢谢你的回答, Christian否。如属性描述符所示,它将在分配对象时保留该对象。因此,在分配时,在将对象分配给self

关于内存管理,这段代码可以吗

@property (nonatomic, retain) id object;
...
id anObject = [[Object alloc] init];
self.object = anObject;
id otherObject = [[Object alloc] init];
self.object = otherObject;
谢谢你的回答,
Christian

否。如属性描述符所示,它将在分配对象时保留该对象。因此,在分配时,在将对象分配给
self.object
时,对象中将有两个保留。因此,您必须释放它:

@property (nonatomic, retain) id object;
...
id anObject = [[Object alloc] init];
self.object = anObject;
[anObject release];

id otherObject = [[Object alloc] init];
self.object = otherObject;
[otherObject release];
...
at dealloc:
self.object = nil;

祝你好运

我喜欢在可用时使用方便的方法,而在不可用时,我总是使用[[[Class alloc]init]autorelease]。看起来比有一条额外的线来释放看起来很奇怪的对象更漂亮。但我想这是一个品味的问题,这也是一个创建自动释放对象的问题。假设OP的代码处于一个紧密的循环中:显式释放比构建大量自动释放的内存要好得多。