zoukankan      html  css  js  c++  java
  • OC4 特性

    OC2.0中引入了特性(property),它组合了新的预编译指令和新的属性访问器语法。

    1、修改特性值

    @property

    这是一种新的编译器功能,表示声明一个新对象的属性。在@interface中使用。

    @property float age;

    其声明的属性是可以直接访问的。也可以用setAge: 来设置属性。

    @property预编译指令的作用是自动声明属性的setter和getter。

    @synthesize age;

    在实现中使用@synthesize表示清除全部setter和getter方法。在@implementation中使用。

    @synthesize也是一种新的编译器功能,表示“创建该属性的访问器”。当遇到代码@synthesize age;时,编译器将输出-setAge: 和age方法的已编译的代码。

    1.3、点表达式

    OC2.0的特性引入了一些新的语法特性,使我们可以更容易地访问对象的属性。

    点表达式(.)。如果点表达式出现在等号(=)左边,该属性名称的setter方法将被调用。如果点表达式出现在对象变量右边,则该属性名称的getter方法将被调用。

    点表达式只是调用访问器方法的一种快捷方式,这种用法并没有其它神秘之处。

    2、特性扩展

    2.1、名称的使用

    有时希望实例变量有一个名称,而公开的属性具有另一个名称。

    例如,如果希望使用其它名称(如appellation)调用Car类中的实例变量name,则只需要在Car.h文件中修改该实例变量的名称。

    @interface Car:NSObject{

      NSString *appellation;

      NSMutableArray *tires;

      Engine *engine;

    }

    @property (copy) NSString *name;

    @property (retain) Engine *engine;

     //@property中可以设置变量的内存管理(retain、assign和copy)

    然后修改@synthesize指令:

    @synthesize name =appellation;

    编译器仍将创建 setName: 和name方法,但在其实现中却使用实例变量appellation。

    2.2 只读特性

    可以使某个对象具有只读属性。该属性可能是一个即时计算的值,也可能是其它对象只能读却不能修改的值。可以使用@property预编译指令的更多属性编写处理这些情况的代码。

    默认情况下,特性是可修改的,即可读取可写入。可以使用特性的readwrite属性(默认情况)。

    使用只读属性的一个示例如下:

    @interface Me: NSObject {

      float showSize;

      NSString *licenseNumber;

    }

    @property (readonly) float shoeSize;

    @property (readonly) NSString *licenseNumber;

    @end

    当@property是只读特性时,编译器将为该属性生成一个getter方法而不生成setter方法。Me类的使用者可以调用shoeSize和licenseNumber。但不能调用setShoeSize:和setLicenseNumber:。

    3、

    特性不支持那些需要接受额外参数的方法。如NSMutableArray。

  • 相关阅读:
    js伪数组转数组内部实现
    Vuex核心部分学习参考地址
    vue中让异步代码变成同步的写法
    node.js中文件操作路径和模板标识路径问题
    如果不想安装cnpm又想使用淘宝的服务器来下载,怎么做?
    npm常用命令
    node中模块加载机制
    通过nodejs,简单模拟客户端和服务端进行通信
    vue中非父子组件的传值
    图论1-2
  • 原文地址:https://www.cnblogs.com/cjj-ggboy/p/13050521.html
Copyright © 2011-2022 走看看