zoukankan      html  css  js  c++  java
  • OC基础--内存管理中的@property关键字以及其参数

    在上一篇博客中整理的内存管理,管理类的代码量会感觉很大,而且如果对象多的话,感觉到代码有点冗余。下面就介绍Xcode中为我们自动生成内存管理代码的关键字@property

    例如:在Person这个类中,要拥有Phone这个类作为成员变量

    之前的写法是:(还有一点时要记得在Person类重写dealloc方法中,一定[_phone release])

     1 @interface Person : NSObject
     2 
     3 {
     4     Phone *_phone;
     5 }
     6 //setter 和 getter 的声明
     7 - (void) setPhone:(Phone *)phone;
     8 - (Phone *) phone;
     9 
    10 @implementation
    11 //setter 和 getter 的实现
    12 - (void) setPhone:(Phone *)phone
    13 {
    14     if (_phone != phone)
    15     {        
    16         [_phone release];
    17         _phone = [phone retain];
    18     }
    19 }
    20 
    21 - (Phone *)phone
    22 {
    23     return _phone;
    24 } 
    25 @end

    应用了@property关键字的写法:(dealloc方法中也一定记得release)

    //这里的retain:生成set方法实现中,release旧值,retain新值--一行代码就搞定

    @property (retain) Phone *phone;

    下面才是今天的重点!

    @property 的参数:

    一、控制set方法的内存管理:

    1.retain:release旧值,retain新值

    2.assign:直接赋值,不做任何内存管理(默认)

    3.copy

    二、控制有没有set方法和get方法

    1.readwrite:同时生成set方法和get方法(默认,用的少)

    2.readonly:只会生成get方法

    三、多线程管理

    1.atomic:性能低(默认)

    2.nonatomic:性能高

    四、控制set方法和个头方法的名称

    1.setter:设置set方法的名称,一定有个冒号:因为冒号也是方法的一部分

    2.getter:设置get方法的名称

    代码实例:

    1 @property (nonatomic, assign,readwrite) int age;
    2 
    3 @property (nonatomic, retain) House *house;
    4 
    5 @property (nonatomic, assign, getter = getHeight, setter = setMyHeight:) int height;
  • 相关阅读:
    AngularJS Insert Update Delete Using PHP MySQL
    Simple task manager application using AngularJS PHP MySQL
    AngularJS MySQL and Bootstrap Shopping List Tutorial
    Starting out with Node.js and AngularJS
    AngularJS CRUD Example with PHP, MySQL and Material Design
    How to install KVM on Fedora 22
    Fake_AP模式下的Easy-Creds浅析
    河南公务员写古文辞职信
    AI
    政协委员:最大愿望是让小学生步行上学
  • 原文地址:https://www.cnblogs.com/gchlcc/p/5201328.html
Copyright © 2011-2022 走看看