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方法的声明与定义。

  • 相关阅读:
    Leetcode 1489找到最小生成树李关键边和伪关键边
    Leetcode 113 路径总和 II
    hdu 1223 还是畅通工程
    hdu 1087 Super Jumping! Jumping! Jumping!
    hdu 1008 Elevator
    hdu 1037 Keep on Truckin'
    湖工oj 1241 畅通工程
    湖工oj 1162 大武汉局域网
    hdu 2057 A + B Again
    poj 2236 Wireless Network
  • 原文地址:https://www.cnblogs.com/naray/p/4672491.html
Copyright © 2011-2022 走看看