iOS开发那些事-性能优化–autorelease的使用问题
来源:互联网 发布:stc51单片机有多少引脚 编辑:程序博客网 时间:2024/06/10 10:50
在MRR中释放对象通过release或autorelease消息实现,release消息会立刻使引用计数-1释放,发送autorelease消息会使对象放入内存释放池中延迟释放,对象的引用计数并不真正变化,而是向内存释放池中添加一条记录,直到当池被销毁前会通知池中的所有对象全部发送release消息真正将引用计数减少。
由于会使对象延迟释放,除非必须,否则不要使用autorelease释放对象,在iOS程序中默认内存释放池的释放是在程序结束,应用程序入口main.m文件代码如下:
int main(int argc, char *argv[]){@autoreleasepool {return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));}}
代码被包裹在@autoreleasepool {… }之间,这是池的作用范围,默认是整个应用。如果产生大量对象采用autorelease释放也会导致内存泄漏。那么什么时候autorelease是必须呢?我们看看下面代码:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{static NSString *CellIdentifier = @”CellIdentifier”;UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];if (cell == nil) {cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];}NSUInteger row = [indexPath row];NSDictionary *rowDict = [self.listTeams objectAtIndex:row];cell.textLabel.text = [rowDict objectForKey:@"name"];NSString *imagePath = [rowDict objectForKey:@"image"];imagePath = [imagePath stringByAppendingString:@".png"];cell.imageView.image = [UIImage imageNamed:imagePath];cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;return cell;}
其中的cell对象不能马上release,我们需要使用它设置表视图画面。autorelease一般应用于为其它调用者提供对象的方法中,对象在该方法不能马上release,而需要延迟释放。
此外,还有一种情况下使用了autorelease,即前文提到的“类级构造方法”:
NSString *message = [NSString stringWithFormat:@"您选择了%@队。", rowValue];
该对象的所有权虽然不是当前调用者,但它是由iOS系统通过发送autorelease消息放入到池中的,当然这一切对于开发者都是不可见的,我们也要注意减少使用这样的语句。
- iOS开发那些事-性能优化–autorelease的使用问题
- iOS开发那些事-性能优化–autorelease的使用问题
- iOS开发那些事--性能优化–内存泄露问题的解决
- iOS开发那些事--性能优化–内存泄露问题的解决
- iOS开发那些事--性能优化–内存泄露问题的解决
- iOS开发那些事--性能优化–内存泄露问题的解决
- iOS开发那些事--性能优化–内存泄露问题的解决
- iOS开发那些事-关于性能优化–选择nib还是故事板的讨论
- iOS app性能优化的那些事
- iOS app性能优化的那些事
- iOS app性能优化的那些事
- iOS app性能优化的那些事
- iOS app性能优化的那些事
- iOS app性能优化的那些事
- iOS app性能优化的那些事
- iOS性能优化那些事
- iOS开发那些事-性能优化–查找和解决僵尸对象
- ios 性能优化之ImageView的那些事
- CodeSmith 使用教程: 总结
- 文人是什么
- 在ruby中,如何检查时间是否过期
- apache https反向代理设置方案
- iOS设置UILabel组件
- iOS开发那些事-性能优化–autorelease的使用问题
- iOS键盘类型
- sharepoint 2010 页面刷新时滚动条位置保持不变 Controlling scrollbar position on postback
- android开发 linux下找不到设备
- <一年成为Emacs高手>更新到20130207版
- 不必追核心,前进途中路自明
- 邪恶妙用DeleteFile函数
- Windows2003 + PHP5.4.7 + Apache2.2.15 + Oracle9.0
- 北京西站地铁开通了