内存管理与属性(mrc)

在MRC下

@property (nonmatic,strong)NSArray *currentArray;

- (void)viewDidLoad

{

    [super viewDidLoad];

    self.currentArray = [NSArray new];

}

- (void)dealloc

{

    [_currentArray release];

   [super dealloc];

}

这样会导致内存泄露,因为创建array 的时候,retaincount是1,赋值给属性(setter)方法的时候,retaincount 值增加1。而在dealloc的时候,只是释放了一次,所以会导致内存泄露。修改如下,self.currentArray = [NSArray array]; 这样的属性retain的dealloc释放,类方法产生的是autorelease对象。如下(strong 的setter方法)

- (void)setCurrentArray:(NSArray *)currentArray

{

    if(_currentArray != currentArray)

    {

        [_currentArray  release];

        _currentArray = [currentArray retain];

    }

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Cocoa内存管理机制 (1)当你使用new、alloc、copy方法创建一个对象时,该对象的保留计数器值为1.当...
    John_LS阅读 2,824评论 0 6
  • 内存管理 简述OC中内存管理机制。与retain配对使用的方法是dealloc还是release,为什么?需要与a...
    丶逐渐阅读 2,028评论 1 16
  • 前言 基础篇介绍了一些关于Objective-C内存管理的常见概念。本文将在前文的基础上扩展以下知识:成员变量se...
    老板娘来盘一血阅读 1,616评论 0 19
  • iOS开发中, 之前一直使用swift, 因此对于Objective-C的内存管理机制长期处于混乱的一知半解状态....
    icetime17阅读 886评论 1 8
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,237评论 30 472