• 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;
  • 相关阅读:
    C++中的结构体
    C++转换
    C++常见问题解答
    hdu 1491
    hdu 1253
    [恢]hdu 2529
    [恢]hdu 2539
    hdu 1708
    [恢]hdu 2512
    [恢]hdu 2401
  • 原文地址:https://www.cnblogs.com/gchlcc/p/5201328.html
Copyright © 2020-2023  润新知