如果声明的是retain类型的,然后使用self.的话此时引用计数会加1,变成1,如果同时又使用了alloc,那么引用计数又加一变成了2,那么如果只是release一次的话就会内存泄漏。
这种情况下的处理是如果同时使用了alloc等控制权处理那么不要使用self.了,直接用变量名字即可。
以下是我的一些总结,如果有不对的地方希望大家多多指教
我们在官方文档里看到这样的代码:
在MyClass.h文件中
@interface MyClass : NSObject { MyObject *myObject; }
@property (nonatomic, retain) MyObject *myObject;
@end
在MyClass.m文件中
@synthesize myObject;
-(id)init{
if(self = [super init]){
MyObject * aMyObject = [[MyObject alloc] init];
self.myObject = aMyObject;
[aMyObject release];
}
return self;
}
为什么要用之上的赋值方法呢?难道self.myObject = [[MyObject alloc] init]; 或者 myObject = [[MyObject alloc] init]; 不可以吗;不要以讹传讹,以下是我的一些见解。
第一种:当加上self.的时候..................................
MyObject * aMyObject = [[MyObject alloc] init]; //aMyObject retainCount = 1;
self.myObject = aMyObject; //myObject retainCount = 2;
[aMyObject release]; //myObject retainCount = 1;
第二种:当不加self.的时候
MyObject * aMyObject = [[MyObject alloc] init]; //aMyObject retainCount = 1;
myObject = aMyObject; //myObject retainCount = 1;
[aMyObject release]; //myObject被释放;