嗨,大家好,我开始玩Objective-C,我想确保我的内存/属性正确。开始Objective-C,内存泄漏问题
假设以下代码:
@interface Rectangle : NSObject
{
Vector2* origin;
//[...]
}
Rectangle* myRect = [[Rectangle alloc] init];
myRect.origin.x = 100.0f;
[myRect print];
myRect.origin = [[Vector2 alloc] init]; //hummm.. 2 concerns here.
关注1:
假设原点标准(分配)中合成属性:
不myRect先前原点ref计数变为0自动当分配新的Vector2和GC后会照顾它?或者我必须在属性中明确地调用release?
关注2:
假设原点将是一个“保留”属性:(顺便说一句:希望声明一个合成保留属性时种代码被自动生成,是可能的?)
-(void) setOrigin: (Vector2*)newOrigin {
[newOrigin retain];
[origin release]
origin = newOrigin;
}
myRect.origin = [[Vector2 alloc] init]
会不会造成双重引用计数增量,那么需要relea:做的时候
然后se被称为两次以避免泄漏?当你使用库/其他人的代码来避免这样的问题时,你们是否依靠良好的文档编码(了解它是一个保留属性),还是有一些更安全的alloc/init对象?
感谢提示!
只是为了澄清 - “原产地”应该是'Vector2 *'类型的,对吗? – 2010-06-04 06:45:15
关于通过合成属性生成什么样的代码,您发布的内容是一个选项,并且是属性和垃圾回收之前使用的选项。还有其他的变化。而且,在原子属性中,这些语句会被某种互斥体括起来。 – JeremyP 2010-06-04 07:33:50