iphone内存管理(二)
2015-09-01 10:57
176 查看
(2)尽量避免使用autorelease
虽然autorelease非常简单有用,但是在iphone上一定要谨慎使用,毕竟iphone内存相当有限.autorelease可能会导致直接的隐型内存泄露.
比如使用
NSString *string = [NSString stringWithFormat:@"value = %d", intVariable];
你可以换为
NSString *string = [[NSString alloc] initWithFormat:@"value = %d", intVariable];
...
[string release];
使用自动释放对象还有个坏处就是不便于开发者管理。增加程序崩溃的几率.
不过autorelease对象也不是一无是处。有时它的作用也很强大。
比如当你需要返回一个对象时就最好使用autorelease
(NSString *)AutoTest
{
return [[[NSString alloc] initWithFormat:@"value = %d", intVariable] autorelease];
}
你还可以在循环中使用autorelease pools
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
for (id item in array)
{
id anotherItem = [item createSomeAutoreleasedObject];
[anotherItem doSomethingWithIt];
}
[pool release];
注意:就我目前测试和观察看来。你只能在同一个函数中使用
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
和
[pool release];才能达到效果
最后一点就是:千万不要尝试去release一个auto对象。否则你的程序必然崩溃
待续......
虽然autorelease非常简单有用,但是在iphone上一定要谨慎使用,毕竟iphone内存相当有限.autorelease可能会导致直接的隐型内存泄露.
比如使用
NSString *string = [NSString stringWithFormat:@"value = %d", intVariable];
你可以换为
NSString *string = [[NSString alloc] initWithFormat:@"value = %d", intVariable];
...
[string release];
使用自动释放对象还有个坏处就是不便于开发者管理。增加程序崩溃的几率.
不过autorelease对象也不是一无是处。有时它的作用也很强大。
比如当你需要返回一个对象时就最好使用autorelease
(NSString *)AutoTest
{
return [[[NSString alloc] initWithFormat:@"value = %d", intVariable] autorelease];
}
你还可以在循环中使用autorelease pools
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
for (id item in array)
{
id anotherItem = [item createSomeAutoreleasedObject];
[anotherItem doSomethingWithIt];
}
[pool release];
注意:就我目前测试和观察看来。你只能在同一个函数中使用
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
和
[pool release];才能达到效果
最后一点就是:千万不要尝试去release一个auto对象。否则你的程序必然崩溃
待续......
相关文章推荐
- iphone内存管理(三)
- angularjs ng-switch
- CocoaPods的安装和使用
- Laravel框架学习-1.初探路由
- Android 监听 home键和菜单键
- 安装使用ffmpeg
- #include<vector> 的用法
- [Bluetooth Core V4.2] VOL2, PartB, 5 Logical Links
- mybatis generator生成乱码问题
- iphone内存管理(一)
- 用Mysql GUI tool 链接 Mysql 错误 2003 的解决办法
- js实现黑客帝国二进制雨
- Centos6.6 ks
- 写入数据至历史库
- Word Ladder II 相邻字符串接龙 BFS
- SVN服务器端配置
- git: git使用存在的错误解决办法
- hdu 1106 - 排序(解题报告)
- Java 多线程 synchronized同步
- 迭代 迭代语句 迭代器 迭代模式