iPad/iPhone内存管理五之如何确定对象返回的值是autorelease
2012-04-29 20:57
471 查看
大家看看下面的区别:
下面是子龙山人叫给方法:
一、如果一个方法以init或者copy开头,那么返回给你的对象的引用计数是1,并且这不是一个autorelease的对象。换句话说,你调用这些方法的话,你就对返回的对象负责,你再用完之后必须手动调用release来释放内存。
二、如果一个方法不是以init或者copy开头的话,那么返回的对象引用计数为1,但是,这是一个autorelease对象。换句话说,你现在可以放心使用此对象,用完之后它会自动释放内存。但是,如果你想在其它地方使用它(比如换个函数),那么,这时,你就需要手动retain它了。
引用计数总结:
当你调用alloc/init的时候,你得到一个引用计数是1的对象。
当你用完这个对象之后,你要对它调用release消息,使其引用计数为0,这样它的内存才会被释放掉。
当你调用一个方法,它不是以init或者copy开头的,这时,返回给你的对象是autorelease的,它是一种在将来某个时刻会自动被释放的对象。(这里我也要提醒大家一句,比如你在写一个函数,它的名字是xxx,没有以init或者copy开头,那么记得你返回的对象一定要是autorelease的,否则,别人在使用你这个函数的时候就会把它当作是autorelease的,那么他就不会release它,这样就会造成内存泄漏,千万要切记!!!)
如果你想继续使用autorelease对象,那么你就要给它放送一个retain消息。
如果你使用alloc/init方法创建了一个对象,但是你想让它自己在出了runLoop之后被自动释放的话,那么你可以在alloc/init之后再调用autorelease。这也是一种见得比较多的写法了。比如,cocos2d里面调用[xxx node]的时候,就等于[[[xxx alloc] init]autorelease].
NSString * sushiString = [NSString stringWithFormat:@"%d: %@", indexPath.row, sushiName];
NSString * sushiString = [[[NSString alloc] initWithFormat:@"%d: %@", indexPath.row, sushiName] autorelease];
下面是子龙山人叫给方法:
一、如果一个方法以init或者copy开头,那么返回给你的对象的引用计数是1,并且这不是一个autorelease的对象。换句话说,你调用这些方法的话,你就对返回的对象负责,你再用完之后必须手动调用release来释放内存。
二、如果一个方法不是以init或者copy开头的话,那么返回的对象引用计数为1,但是,这是一个autorelease对象。换句话说,你现在可以放心使用此对象,用完之后它会自动释放内存。但是,如果你想在其它地方使用它(比如换个函数),那么,这时,你就需要手动retain它了。
引用计数总结:
当你调用alloc/init的时候,你得到一个引用计数是1的对象。
当你用完这个对象之后,你要对它调用release消息,使其引用计数为0,这样它的内存才会被释放掉。
当你调用一个方法,它不是以init或者copy开头的,这时,返回给你的对象是autorelease的,它是一种在将来某个时刻会自动被释放的对象。(这里我也要提醒大家一句,比如你在写一个函数,它的名字是xxx,没有以init或者copy开头,那么记得你返回的对象一定要是autorelease的,否则,别人在使用你这个函数的时候就会把它当作是autorelease的,那么他就不会release它,这样就会造成内存泄漏,千万要切记!!!)
如果你想继续使用autorelease对象,那么你就要给它放送一个retain消息。
如果你使用alloc/init方法创建了一个对象,但是你想让它自己在出了runLoop之后被自动释放的话,那么你可以在alloc/init之后再调用autorelease。这也是一种见得比较多的写法了。比如,cocos2d里面调用[xxx node]的时候,就等于[[[xxx alloc] init]autorelease].
相关文章推荐
- PHP 如何查看AJAX返回的对象和数组的内容
- objective-c中对象所有权的内存管理(关于set,get方法),以及如何使用@property来进行简易操作(九)
- iphone/ipad如何获取本机序列号和设备标示
- iPhone iPad 如何播放网页调用Flash视频
- 详解iPhone下如何获取对象二
- 如何在运行时确定对象类型(RTTI)
- [C/C++]函数如何返回struct或class对象
- 从二叉搜索树的第k个节点问题看递归如何返回普通变量和对象
- 如何在iphone/ipad上联真机调试
- js 返回对象|js返回多个值的方法|js如何返回多个值
- C/C++函数如何返回struct或class对象
- 如何将音视频发布到移动设备,android,ios,iphone,ipad等
- 如何在运行时确定对象类型(RTTI)
- Objective C内存管理——如何理解autorelease
- ipad iphone ios系统设备忘记密码如何修复 如何进入恢复模式
- 转载[Mobile Web]Web中如何分辨移动设备?(iPad、iPhone、Android)
- iphone/ipad如何获取本机UDID
- c#如何接受js返回ScriptObject对象存储的json数据