zoukankan      html  css  js  c++  java
  • [学习笔记—Objective-C]《Objective-C-基础教程 第2版》第十一章 属性

    11.1 使用属性值

    @property float rainHandling;
    //表明此类具有float类型的属性,其名称为rainHandling

    注意:属性的名称不必与实例变量名称同样。

    @synthesize rainHandling;
    //表示创建了该属性的訪问代码
    

    注意:使用属性后,能够不声明实例变量。编译器会声明。

    有两个地方能够加入实例变量声明:

    • 头文件:让子类直接通过属性訪问变量
    • 实现文件:变量仅仅属于当前类

    点表达式:

    • 点表达式出如今(=)的左边:setter方法
    • 点表达式出如今(=)的右边:getter方法

    注意:假设訪问属性提示訪问的对象不是struct类型,请检查当前类是否已包括了所需的必备头文件

    11.2 属性扩展

    属性同样适用于int,char。BOOL,struct类型,也能够定义一个NSRect对象的属性

    保留死循环(retain cycle):Car对象拥有engine对象,可是engine对象不能反过来拥有Car对象。

    copy特性

    • name存取方法:
    - (void)setName: (NSString *)newName {
              [name release];
              name = [newName copy];
    } // setName
    
    - (NSString *)name {
              return (name);
    } // name
    

    等同于:

    //name属性是copy特性
    @property (copy) NSString *name;
    @synthesize name;
    

    retain特性

    • engine 的存取方法:
    
    - (void) setEngine: (Engine *) newEngine{
    
              [newEngine retain];
              [engine release];
              engine = newEngine;
    
    } // setEngine
    
    - (Engine *) engine{
              return (engine);
    } // engine
    

    等同于:

    //engine属性使用的是保留和释放特性
    @property (retain) Engine *engine;
    @synthesize engine;
    

    noatomic特性:iOS程序常常使用的技术。资源有限的设备上获得更好的性能。

    假设自定义了存取方法。那么必须使用nonatomic特性。

    默认特性:假设没有为属性指定不论什么特性,它们会默认使用nonatomic和assign特性。

    11.21 名称的使用

    属性的名称一般与支持属性的实例变量名称同样。


    有时程序猿希望实例变量是一个名称,而公开的属性是还有一个名称。

    @property(copy)NSString *name;
    @synthesize name = appellation;
    // 编译器将创建-setName:和-name方法,但在实现代码中用的是appellation实例变量。
    

    注意

    直接訪问实例变量:self.name
    使用訪问方法进行赋值:[self setName:@"Car"];

    11.22 仅仅读属性

    对于仅仅能读取,无法更改的值:

    @property(readonly)float shoeSize;
    

    注意:仅仅生成一个getter方法而不会生成setter方法

    11.23 自己动手

    @dynamic告诉编译器不要生成不论什么代码或创建对应的实例变量。

    改变方法名:
    使用getter=和setter=特性就能够自定义想要的方法名称

    @property (getter=isHidden) BOOL hidden;
    //告诉编译器生成名为isHidden的getter方法,并生成名为默认setHidden:的setter方法
    

    注意:属性仅仅支持替代-setBlah和-blah方法,但不支持那些须要接收额外參数的方法

  • 相关阅读:
    Windows DLL调用实例
    DLL头文件的格式和应用
    Strategy factory
    抽象数据类型(ADT)和面向对象编程(OOP)3.5 ADT和OOP中的等价性
    抽象数据类型(ADT)和面向对象编程(OOP)3.4 面向对象的编程
    抽象数据类型(ADT)和面向对象编程(OOP)3.3 抽象数据类型
    抽象数据类型(ADT)和面向对象编程(OOP)3.2规约
    抽象数据类型(ADT)和面向对象编程(OOP)3.1数据类型和类型检查
    软件构造 消息传递
    软件构造 并发3(线程安全性)----锁定和同步
  • 原文地址:https://www.cnblogs.com/liguangsunls/p/7202158.html
Copyright © 2011-2022 走看看