• 关于属性的个人理解


    声明属性的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;

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

     

    属性名前加下滑线








































  • 相关阅读:
    android 的权限
    做android遇到有问题有感
    帮人写的 论文 C语言的 学生管理系统
    android 服务器的 mysql 查询悲剧
    android开发遇到的问题
    想和各位技术高人材交流技术特建了相关的QQ群
    Invalid token '44' in input string
    设置PLSQL Developer访问本机64位Oracle
    SQL Server 2005还原数据库时出现“不能选择文件或文件组XXX_log用于此操作……错误:3219……”的解决方法
    C#的JSON开发包 LitJSON
  • 原文地址:https://www.cnblogs.com/YRFios/p/5708522.html
Copyright © 2020-2023  润新知