zoukankan      html  css  js  c++  java
  • IOS 在MRC和ARC @property 与 @synthesize 特性

    一、格式与例子

    • 格式
      1 (参数1, 参数2, 参数3) 类型 变量名;
    • 例子
      1 @property (nonatomic, assign, readonly) NSString *iText;

    二、MRC下,特性

    • @property 声明的属性,在编译时刻会生成相应的成员变量(_XXX),除非,声明一个与属性同名的成员变量,则不会自动生成相应的_XXX成员变量。
    • @property 与 @synthesize 是成对出现的。
    • @property 特性是由xcode自动生成setter和getter方法的声明 。
    • @synthesize 特性是由xcode自动生成setter和getter方法的定义。
    • @property 是在@interfance与@end之间,并且,不能声明类成员作用域中。
    • @synthesize 是在@implemention与@end之间。
    • 使用@property定义的变量,可以在其它类中依然有效。
    • 在@property定义的变量,使用格式:self.*,而这种格式在@interface块作用域中定义的成员变量,不能如此使用。

    三、在MRC下,@property 与@synthesize原理

     1 @interface Demo : NSObject
     2 {
     3     NSString *name;
     4 }
     5 
     6 @property (nonatomic, copy) NSString *name;
     7 @end
     8 
     9 @implementation Demo
    10 @synthesize name;
    11 
    12 - (void)print
    13 {
    14     NSLog(@"name : %@", self.name);
    15 }
    16 @end

    @property 是由编译器在编译时刻为其生成getter and setter方法声明。(上面第七行代码)

    @synthesize 是由编译器在编译时刻为其生成getter and setter方法定义。其下为setter实现:

     1 @implementation
     2 - (void)setName:(NSString *)aName
     3 {
     4     [aName retain];
     5     [iName release];
     6     iName = aName;
     7 }
     8 
     9 - (instancetype)getName
    10 {
    11     return [iName autorelease];
    12 }
    13 @end

     四、在ARC下,@property则做了三件事:

    1. 由@property声明的属性,在编译时刻为其生成成员变量(_XXX),除非,声明一个与属性同名的成员变量,则不会自动生成相应的_XXX成员变量。

    1 @interface CWATempScheduleViewController
    2 {
    3   // Boolean _state; // 隐式生成
    4 }
    5 
    6 @property (nonatomic, assign) Boolean state;
    7 
    8 @end

    2. 由@property声明的属性,在编译时刻为其生成getter和setter方法的声明与定义。

  • 相关阅读:
    防止死锁的加锁机制
    python线程threading.Timer源码解读
    python语言线程标准库threading.local源码解读
    栈和队列的总结
    如何根据入栈序列判断可能的出栈序列
    使用 Air 热编译 Gin 项目
    【Golang设计模式】7.外观模式
    Go中的数据类型、指针、new和make
    【Golang设计模式】6.模板方法模式
    【Golang设计模式】5.原型模式
  • 原文地址:https://www.cnblogs.com/naray/p/4672491.html
Copyright © 2011-2022 走看看