假设以下代码:
@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:
在分配新的Vector2时,myRect以前的origin ref计数是否自动变为0,GC稍后会处理它?或者我必须在属性内部显式调用release?
假设origin是一个“retain”属性:(顺便问一下:当声明一个合成的retain属性时,这种代码会自动生成吗
-(void) setOrigin: (Vector2*)newOrigin {
[newOrigin retain];
[origin release]
origin = newOrigin;
}
然后在执行以下操作时:
myRect.origin = [[Vector2 alloc] init]
这不会导致双引用计数增加,然后需要调用release两次以避免泄漏吗?在使用库/其他人的代码来避免此类问题时,你们是否依赖文档化的代码(知道它是一个retain属性),还是有一些更安全的alloc/init对象方法?
谢谢你的小费!