• Objective


    在前面, 我们基本上讲完了OC的内存管理, 但如果按照我们之前那样子做, 我们需要写非常非常多的代码, 在我们实际开发中, 不可能就只有那么一两个对象, 所以我们需要写的set方法和get方法就一大堆, 比如下面这个例子:

    #import <Foundation/Foundation.h>
    #import "Book.h"
    
    @interface Person : NSObject
    {
        int _age;
        Book *_book;
    }
    
    - (void)setAge:(int)age;
    - (int)age;
    
    - (void)setBook:(Book *)book;
    - (Book *)book;
    
    @end
    
    @implementation Person
    - (void)setAge:(int)age
    {
        _age = age;
    }
    - (int)age
    {
        return _age;
    }
    
    - (void)setBook:(Book *)book
    {
        if (_book != book)
        {
            [_book release];
            _book = [book retain];
        }
    }
    - (Book *)book
    {
        return _book;
    }
    
    - (void)dealloc
    {
        [_book release];
        [super dealloc];
    }
    @end
    


    #import <Foundation/Foundation.h>
    
    @interface Book : NSObject
    @end
    
    @implementation Book
    @end

    #import <Foundation/Foundation.h>
    #import "Person.h"
    #import "Book.h"
    
    int main(int argc, const char * argv[])
    {
        Person *p = [[Person alloc]init];
        
        Book *b = [[Book alloc]init];
        
        p.book = b;
        
        NSLog(@"%ld", [b retainCount]);
        
        [b release];
        [p release];
        
        return 0;
    }
    

    没错, 按照上面的例子, 我们是可以进行正常的内存管理, 但这样子写, 会累死人, 因为一旦创建一个对象就要写一次set, get方法, 而且这些代码都是非常的垃圾, 非常的恶心, 一旦对象多了, 那么整个项目就乱七八糟, 几乎都是set和get方法, 为了解决这个问题, 其实可以运用@property, 比如:


    #import <Foundation/Foundation.h>
    #import "Book.h"
    
    @interface Person : NSObject
    
    @property int age;
    
    @property (retain) Book *book;
    
    @end
    

    只要在@property后加上一个小括号并且写上retain, 那么就可以自动生成这一堆代码:

    - (void)setBook:(Book *)book
    {
        if (_book != book)
        {
            [_book release];
            _book = [book retain];
        }
    }
    - (Book *)book
    {
        return _book;
    }



    有了@property(retain)之后, 从此我们写代码就非常的舒服了, 不用再去写什么set, get方法了~~当然@property并不是万能的, dealloc方法还是需要我们自己去写~~如果不想写dealloc, apple官方也有提供一个方法, 那么就是ARC机制啦, 这个我们后面会讲到~~





    当然, 在@property()的小括号里面, 不只是写retain, 还可以在里面写很多参数, 这个我们后面慢慢详解~~~








    好了, 这次我们讲到这里, 下次我们继续~~~

  • 相关阅读:
    面试笔试题
    类型转换
    c++11之智能指针
    c++预处理命令
    java的javac不能正常运行
    状态模式
    观察者模式Observer
    带图形界面的虚拟机安装+Hadoop
    测试工具的使用:JUnit、PICT、AllPairs
    Test_1 一元二次方程用例测试以及测试用例
  • 原文地址:https://www.cnblogs.com/iOSCain/p/4282825.html
Copyright © 2020-2023  润新知