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;
}