zoukankan      html  css  js  c++  java
  • 为什是@property不自动生成属性?

    使用 @property 时候,XCode 会自动为我们生 Setter 和 Getter,甚至会自动生成属性。

    例如下面的情况:

    // .h 文件
    @interface Person : NSObject
    
    @property (copy, nonatomic) NSString *name;
    
    @end
    
    // .m 文件
    @implementation Person
    @end

    上面的代码等价于下面的代码(不考虑多线程):

    // .h 文件
    
    @interface Person : NSObject
    {
        NSString *_name;
    }
    
    - (NSString *)name;
    - (void)setName:(NSString *)name;
    
    @end
    
    // .m 文件
    
    @implementation Person
    
    - (NSString *)name
    {
        return _name;
    }
    - (void)setName:(NSString *)name
    {
        _name = [name copy];
    }
    
    @end

    但是当我们同时重写 name 的 Getter 和 Setter 的时候,问题就出现了:

     

    同时附上代码:

    // .h 文件
    @interface Person : NSObject
    
    @property (copy, nonatomic) NSString *name;
    
    @end
    
    // .m 文件
    @implementation Person
    
    - (NSString *)name
    {
        return _name;
    }
    - (void)setName:(NSString *)name
    {
        _name = [name copy];
    }
    
    @end

    上面这段代码,XCode 会报警告,说并没有 _name 属性,所以,我们同时重写 name 的 Getter 和 Setter 之后,XCode 就不会自动给我们创建 _name 属性。为什么会这样呢?要理解这个原理就不得不提计算属性这个概念,有些 @property 定义的属性并不一定有

  • 相关阅读:
    Linux 用户和组管理
    Bash 基础特性
    Linux 中常用的基础命令二
    Linux 中常用的基础命令一
    Linux 获取帮助
    Linux 基础入门二
    Linux 基础入门一
    计算机基础
    python 操作元组 列表===python中三大宝刀(字典已经再上一遍 说过)
    mysql 创建数据存储过程的申明
  • 原文地址:https://www.cnblogs.com/ddhjy/p/4684112.html
Copyright © 2011-2022 走看看