美文网首页
OC基础 ---- > 属性和点语法

OC基础 ---- > 属性和点语法

作者: b8028f13eaa2 | 来源:发表于2016-05-19 10:37 被阅读45次

    A ---- > setter . getter 定义

    1、在OC中,为单一实例变量赋值的方法称为setter 方法(设置器)

    2、在OC中,读取实例变量的方法称为 getter 方法(访问器)

    B ---- > setter /getter 的书写格式

    1、-(void)setAge :(NSUInteger)age;

    set + 实例变量名 (首字母大写)忽略下划线

    2、-(NSUInteger)age;

    返回值类型与实力变量类型一致,方法与实例变量名相同,忽略下划线

    C---- > 属性的定义---> 作用

    1、OC 2.0的语法, 提供了setter 和getter 方法的默认实现

    可以简化程序代码,提高程序的安全性

    D  ----> 关键字 + 实例

    .h 文件 : @property NSString *name 相当于声明了实例变量的 setter 和getter 方法

    .m 文件 : @synthesize     name = _name; 

    1)、@synthesize name 为实现声明的属性

    2)、_指定生成的setter 和 getter  方法的内部操作的实例变量

    Xcode 4.5之后 @synthesize 可以省略。 当没有实现getter 和 setter 方法的时候 通过 @synthesize 可以自动生成标准的 setter 和 getter 方法

    E ---- > 属性和实例变量

    1、如果方法内部操作的实例变量未定义,系统会自动生成一个_属性名的实例变量,但是生成的实例变量可见度私有。子类不可访问

    2、一旦同时重写了setter 和 getter 方法, 并且没有实现 @synthesize ,@synthesize 就  不再  生成实例变量

    F ---- > 属性的特性

    1、为属性提供的一些关键字来控制setter getter 方法的实现细节 ,这些关键字称为属性的特性

    G------>、读写控制 (readonly \readwrite\setter = \getter = ) 1)、readonly -->只生成 getter 方法,不生成 setter 方法

    2)、readwrite -->告诉编译器生成 setter 和 getter 方法,默认的读写特性

    3)、setter = 指定属性生成的setter 方法的名字

    getter = 指定生成getter 方法的名字

    H----- >、原子性控制 (nonatomic atomic)

    1)\atomic --- > 原子特性,setter getter 方法在多线程访问下是绝对安全的,即 setter 和 getter 内部做了多线程访问处理。 默认的原子特性

    2)nonatomic --- > 非原子特性 setter 个getter 内部不会做多线程访问处理

    3)使用 atomic 对setter 和getter 不断的加锁 解锁 保证线程访问的安全,但是会 占用系统资源,降低系统性能 。所以只有在需要线程安全的时候才会定义为 atomic

    I ------ > 属性的特性  -- - ->语义特性

    1、语义设置 (assign/retain/copy)

    2、如果属性是非对象类型,属性的语义设置使用assign;

    如果属性是对象类型,属性的语义设置为retain;若果属性是对象类型并且想得到对象的副本,使用copy

    3、语义设置 assign 内部实现

    - (void) setAge : ( NSInteger ) age {

         _age = age ;

    }

    - ( NSInteger ) age{

        return _age;

    }

    4、语义设置关键字为 retain  --- >内部实现

    - ( void )setName: ( NSString *)name{

        if   ( _name != name ){

              [ _name release];   

            _name = [ name retain ];

       }

    }

    - ( NSString * ) name{

    return [[ _name retain ] autorelease ];

    }

    5、语义设置的关键字是 copy 

    - (void)setGender : (NSString *)gender { 

        if ( _gender != gender ){

           [ _gender release ];

              _gender = [gender copy]

       }

    }

    6、J ---- > 点语法

    1、定义 --- > 在OC 2.0 中定义的语法格式 ,提供了便捷的属性访问方式

    2、使用 : 符合系统默认的setter getter 书写格式的方法都可以使用点语法

    3、属性是一对 getter 和 setter 方法, 点语法是属性的另一种调用格式

    相关文章

      网友评论

          本文标题:OC基础 ---- > 属性和点语法

          本文链接:https://www.haomeiwen.com/subject/zzzwrttx.html