promotion image of download ymail app
Promoted

Objective-C 關於 @synthesize 的問題

//ViewController.h

@synthesize detailDescriptionLabel = _detailDescriptionLabel;

請問為何程式碼中會有 _detailDescriptionLabel ?底線是麼來的?

已更新項目:

不小心把m打成h了*~*

我知道@property& @synthesize的意思。

但我還是不知道那有底線的東西是什麼意思?

是一個物件的別稱嗎?

(初學者,請多包涵^ ^)

1 個解答

評分
  • 8 年前
    最佳解答

    你看到的@synthesize應該是寫在.m檔裡的,而不是.h

    你一定沒有把.h和.m放在一起看

    原始程式一定是長下面這樣

    .h

    @interface ViewController : UIViewController

    {

    UILabel * _detailDescriptionLabel;

    }

    @property (nonatomic, retain) UILabel* detailDescriptionLabel;

    .m

    @implementation view1Controller

    @synthesize detailDescriptionLabel = _detailDescriptionLabel;

    ......

    @property是針對一個物件,宣告其屬性,宣告完後在其他地方就可以用classname.detailDescriptionLabel 直接讀或寫此變數

    而@synthesize會在.m檔建立該屬性的getter和setter,是寫給compiler看的,將屬性detailDescriptionLabel 對應到變數_detailDescriptionLabel;

    其實常見的寫法會省略掉有底線的那個變數,像下面這樣:

    .h

    @interface ViewController : UIViewController

    {

    // UILabel * detailDescriptionLabel; (本行可有可無)

    }

    @property (nonatomic, retain) UILabel* detailDescriptionLabel;

    .m

    @implementation view1Controller

    @synthesize detailDescriptionLabel;

    ......

    ---

    多看些程式範例,實際跑一跑,就會懂了,

    可以去借一本iOS programming或Objective-C的教學書籍來看

    2012-07-12 14:12:02 補充:

    底線的那個是一個「變數」

    property宣告的是「屬性」,宣告某屬性對應到某變數。

    • Commenter avatar登入以對解答發表意見
還有問題?馬上發問,尋求解答。