objective-c 内存管理的文章摘录1

今天有空想学习一下objective-c的内存管理的知识就上网查了一些文章.

下面的这种方式是不对的

Instanceyoudon’townissentrelease

-(void)reset{

NSNumber*zero=[NSNumbernumberWithInteger:0];创建的是一个autorelease的对象

[selfsetCount:zero];

[zerorelease];//这里释放是危险的

}

Whenyouaddanobjecttoacollectionsuchasanarray,dictionary,orset,thecollectiontakesownershipof

it.在集合中增加object,那么这个object的所有者就变成了集合了

代码

//...

for(i=0;i<10;i++){

NSNumber*convenienceNumber=[NSNumbernumberWithInteger:i];

[arrayaddObject:convenienceNumber];

}

//这种情况不需要release

NSMutableArray*array;

NSUIntegeri;

//...

for(i=0;i<10;i++){

NSNumber*allocedNumber=[[NSNumberalloc]initWithInteger:i];

[arrayaddObject:allocedNumber];

[allocedNumberrelease];

}

//这种情况需要,此处只是将retain的计数减1而已

*******************************************

安全返回对象

下面两种方式是正确的

-(NSString*)fullName{

NSString*string=[NSStringstringWithFormat:@"%@%@",firstName,lastName];

returnstring;

}

-(NSString*)fullName{

NSString*string=[[[NSStringalloc]initWithFormat:@"%@%@",firstName,

lastName]autorelease];

returnstring;

}

相反,下面的方式是错误的

(NSString*)fullName{

NSString*string=[[[NSStringalloc]initWithFormat:@"%@%@",firstName,

lastName]release];

returnstring;

}

同样,下面的方式也是错的

(NSString*)fullName{

NSString*string=[[NSStringalloc]initWithFormat:@"%@%@",firstName,

lastName];

returnstring;

}

相关推荐