内存管理-多对象内存管理解析

作者: Mr_HeH | 来源:发表于2017-04-16 16:09 被阅读36次

    从前面的例子我们可以看出单个对象的内存管理无非就是retain和release的简单使用,因此觉得内存管理没啥难理解的。其实难点在于多个对象之间的内存管理,这篇文章就简单的解析多对象的内存管理。

    1. 首先创建两个类,一个是Person 类,一个是Book类
    Person.h 文件
    #import <Foundation/Foundation.h>
    #import "Book.h"
    @interface Person : NSObject
    {
        Book *_book;
    }
    
    -(void)setBook:(Book *)book;
    -(Book *)book;
    @end
    
    Person.m 文件
    
    #import "Person.h"
    
    @implementation Person
    
    -(void)setBook:(Book *)book{
    
        _book = [book retain];
        
    }
    
    -(Book *)book{
    
        return _book;
    }
    
    
    -(void)dealloc{
        
        [_book release];
        [super dealloc];
        NSLog(@"---person释放了-");
    }
    @end
    
    Book.h 文件
    #import <Foundation/Foundation.h>
    
    @interface Book : NSObject
    {
        int _price;
    }
    -(void)setPrice:(int)price;
    -(int)price;
    @end
    
    Book.m 文件
    
    #import "Book.h"
    
    @implementation Book
    
    -(void)setPrice:(int)price{
    
        _price = price;
    }
    
    -(int)price{
    
        return _price;
    }
    
    -(void)dealloc{
    
        NSLog(@"book释放了-----");
        [super dealloc];
    }
    
    @end
    
    
    上面的代码中我们创建了两个类,Person对象有一个Book属性。接着在controller中操作它们。
        Person *p = [[Person alloc]init];
        Book *book = [[Book alloc]init];
        
        [p setBook:book];
        
        [book release];
        book = nil;
        
        [p release];
        p = nil;
    
    

    从controller中的代码一步一步的分析,首先初始化了Person和Book对象,此时他们的引用计数都是1。接着就是把book对象通过setter方法赋给p,此时p也持有了这个Book对象,根据内存管理的原则竟然持有了这个对象,这个对象的引用计数就要加1。所有有了

    _book = [book retain];
    

    接着继续book不再用这个对象就会release,此时Book的引用计数-1。接着p指针也不再用Perosn了,p会release。在Person销毁时,他还持用Book,所以他得负责人,在走之前先把Book也释放了,于是就有了在person的dealloc方法之前对_book进行-1

    -(void)dealloc{
        
        [_book release];
        [super dealloc];
        NSLog(@"---person释放了-");
    }
    

    相关文章

      网友评论

        本文标题: 内存管理-多对象内存管理解析

        本文链接:https://www.haomeiwen.com/subject/aupaattx.html