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;

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

     

    属性名前加下滑线








































  • 相关阅读:
    交换机的配置文件和系统映像文件备份与恢复(如果不小心损坏了,可以用这种方法恢复)
    交换机端口安全配置
    路由器密码重置(不是适用于所有有些启动顺序数字不一样)
    交换机的默认网关(跨网段telnet)
    思科交换机的初始配置(使用telnet登录)
    Linux命令集(第一部分共40个)
    Linux6.9安装
    javamail邮件发送报错解决方案
    isEmpty()与equals()、==“”区别
    eclipse svn 修改了类名之后提交
  • 原文地址:https://www.cnblogs.com/YRFios/p/5708522.html
Copyright © 2011-2022 走看看