zoukankan      html  css  js  c++  java
  • 关于属性的个人理解

    声明属性的4种方法:

    //代码一:
    @interface BaseClass : NSObject{
    @public
    NSString *_name;
    }
    @property(nonatomic,copy,readonly) NSString *name; //这里使用的是readonly,所有会声明geter方法

    -(void) setName:(NSString*)newName;
    /代码二:
    @interface BaseClass : NSObject{
    @public
    NSString *_name;
    }
    @property(nonatomic,copy,readonly) NSString *name; //这里虽然声明了readonly,但是不会生成getter方法,因为你下面自己定义了getter方法。

    -(NSString*) name; //getter方法是不是只能是name呢?不一定,你打开Foundation.framework,找到UIView.h,看看里面的property就明白了)
    -(void) setName:(NSString*)newName;

    //代码三:
    @interface BaseClass : NSObject{
    @public
    NSString *_name;
    }
    @property(nonatomic,copy,readwrite) NSString *name; //这里编译器会我们生成了getter和setter

    //代码四:
    @interface BaseClass : NSObject{
    @public
    NSString *_name;
    }
    @property(nonatomic,copy) NSString *name; //因为readwrite是默认行为,所以同代码三
    上面四段代码是等价的,接下来,请看下面四段代码:
    //代码一:
    @synthesize name = _name; //这句话,编译器发现你没有定义任何getter和setter,所以会同时会你生成getter和setter

    //代码二:
    @synthesize name = _name; //因为你定义了name,也就是getter方法,所以编译器只会为生成setter方法,也就是setName方法。

    -(NSString*) name{
    NSLog(@"name");
    return _name;
    }

    //代码三:
    @synthesize name = _name; //这里因为你定义了setter方法,所以编译器只会为你生成getter方法

    -(void) setName:(NSString *)name{
    NSLog(@"setName");
    if (_name != name) {
    [_name release];
    _name = [name copy];
    }
    }

    //代码四:
    @synthesize name = _name; //这里你自己定义了getter和setter,这句话没用了,你可以注释掉。

    -(NSString*) name{
    NSLog(@"name");
    return _name;
    }

    -(void) setName:(NSString *)name{
    NSLog(@"setName");
    if (_name != name) {
    [_name release];
    _name = [name copy];
    }
    }

    说了这么多也该说说我的干货了(以上都是复制)
    在什么时候使用@property:
    1⃣️:当需要进行外部传值
    2⃣️:当项目中多处用了@property 为了美观就统一使用。


    在只需要在本类中使用的属性最好在

    @implementation addColleageView{

        UITableView *_colleageTableViews;

    }中声明属性,因为是一种国际规范(最好养成这种习惯)

     

    属性名前加下滑线








































  • 相关阅读:
    正则表达式入门(3)
    正则表达式入门(2)
    正则表达式入门
    函数的参数传递
    python常用库之random
    插入排序与归并排序
    浅拷贝与深拷贝
    装饰器学习小程序
    Python的“is”与“==”
    Oracle中断中止exp/imp和expdp/impdp数据库导入导出
  • 原文地址:https://www.cnblogs.com/YRFios/p/5708522.html
Copyright © 2011-2022 走看看