[英]retain object in objective-c
我正在做一个设置方法:
OBS:somobject是类的属性。
– (void)setSomeObject:(SomeObject *)newSomeobject { [someobject autorelease]; someobject = [newSomeobject retain]; return; }
在[somobject autorelease]上,我声明我不想在setSomeObject范围内拥有该对象。
是否会释放另一个对象保留的“ someobject”? 还是仅在setSomeObject方法上释放对象?
如果someobject类属性已经存在?
该对象的行为是什么?
我在方法中重命名了参数,使其与ivar不同:
– (void)setSomeObject:(SomeObject *)newObject
{
[someobject autorelease];
someobject = [newObject retain];
}
另外,您应该阅读Apple文档以了解内存管理以及@property
和@synthesize
。
您有一个严重的问题,因为您似乎有两个具有相同名称的变量(方法参数和实例变量)。 编译器(以及该问题的读者)无法告诉您所指的是哪个。
有关您的内存管理问题,请查阅Apple的编程指南。
您需要在二传手中完成的工作是:
当然,如果您按此顺序进行字面处理,则在旧对象和新对象相同的情况下,您可能会过早释放对象。 那就是“自动释放”派上用场的地方,因为它安排了要释放的对象,但仅在您的方法返回之后才进行。
将方法参数和实例变量命名为(IMHO)一样令人困惑,并且会向您发出编译器警告,但是如果您绝对坚持这样做,则可以使用“ self->”来指定您所指的是实例变量:
– (void)setSomeObject:(SomeObject *)someobject {
[self->someobject autorelease];
self->someobject = [someobject retain];
return;
}
最后,除非您的setter方法必须执行特殊操作,否则应考虑使用@synthesize自动生成您的setter / getter。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.