搜尋

首頁  >  問答  >  主體

objective-c - OC 直接使用@property就能定義屬性了嗎?

#import <Foundation/Foundation.h>

@interface Person : NSObject


@property  NSString * name;


@end

這樣就直接能使用p.name了。
好像不需要如下定義:

#import <Foundation/Foundation.h>

@interface Person : NSObject{
NSString* _name;

}


@property  NSString * name;


@end

這兩種方式有啥差別呢?

ringa_leeringa_lee2804 天前469

全部回覆(2)我來回復

  • 天蓬老师

    天蓬老师2017-04-24 09:16:09

    我的經驗來說,建議是全部用property定義名字,這樣能分清楚變數記憶體操作方式(多執行緒實在太少,可以忽略)。並且,對我來說,這是更容易辨別全域變數的方法之一,在m檔中直接使用_name,可以快速理解這是全域變數。我認為,使用property來做全域變數是個非常好的習慣。另外,@freewolf這裡講到的synthesize其實可以省略。這裡用一個簡單的setter來舉例。

    #import <Foundation/Foundation.h>
    
    @interface Person : NSObject
    
    @property (nonatomic,retain) NSString * name;
    
    @end
    
    #import "Person.h"
    
    @implementation Person
    //下一步可以省略
    @synthesize name = _name;
    
    -(void) setName:(NSString *)name
    {
        name = _name;
    }
    
    @end

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-24 09:16:09

    雷雷

    回覆
    0
  • 取消回覆