2011-12-26 60 views
2

我會提供一個簡單的方法,然後解釋,我怎麼看它,如果這是不正確,請讓我知道和指正。我覺得我理解'自我',但仍然懷疑自己。我對「自我」的理解是否正確?

-(NSString *)giveBack { 
    NSString *string = [NSString stringWithFormat:@"Hi there!"]; 
    return string; 
} 

-(IBAction)displayIt { 
    NSString *object = [self giveBack]; 
    [myView setText:object]; 
} 

「myView」是一個UITextView對象。

現在作爲「自我」 ..

基本上,我說在我創建一個名爲「對象」,並在其中存儲的方法的NSString對象返回一個字符串我-displayIt方法,說「你好」。 這種方法(名爲「相同的回報」)是我的類名執行(無論我命名的項目)。它是否正確?

回答

2

不,不準備創建稱爲object一個對象,然後存儲在方法中它等你正在創建可變可容納一個對象的參考和內將其存儲到所獲得的對象的引用通過調用一個方法。

[注:以下假定您使用的自動內存管理(ARC或垃圾收集),不將提到的引用計數。如果您正在使用手動memoery有更多的考慮...]

添加行號到您的樣本:

1. -(NSString *)giveBack 
    { 
2.  NSString *string = [NSString stringWithFormat:@"Hi there!"]; 
3.  return string; 
    } 

4. -(IBAction)displayIt 
    { 
5.  NSString *object = [self giveBack]; 
6.  [myView setText:object]; 
    } 
  1. 聲明giveBack作爲一個類的實例方法,以被調用它必須在特定的實例上調用。

  2. 的RHS([NSString stringWithFormat:@"Hi there!"])調用它創建NSString類型的對象,並返回一個參考,NSString *類型,對該對象的類的方法。的LHS聲明一個可變string),其可容納到一個NSString對象的引用。分配(=)將RHS返回的參考存儲到LHS聲明的變量中。

  3. 返回作爲方法

  4. 的結果在string值聲明稱爲實例方法displayIt

  5. RHS:調用該對象實例的實例方法(giveBackself - self是一個在實例方法中引用當前對象實例(在此例中爲displayIt)。 LHS:聲明NSString *類型的變量object。作業:將對RHS方法調用返回的NSString的引用存儲到LHS中聲明的變量中。

  6. 呼叫由所述可變myView引用的對象實例傳遞給它在可變object發現參考一個NSString實例方法setText:

+0

這是迄今爲止我讀過的最好的解釋.. 我剛剛得到它.. 順便說一下,我在原來的帖子中寫得很糟糕,但我很清楚1-4行的所有內容。這是當我自己不確定的時候,自我發揮的作用。但謝謝你爲我清理一切.. – 2011-12-26 11:13:41

+0

神聖的廢話..我必須告訴你,在這之後..它就像你打開了防洪大門,所有的信息只是流入,一切現在做得如此之多,更有意義..再次感謝。 – 2011-12-26 11:25:53

1

你存儲通過「相同的回報」,而不是方法本身返回的字符串。該方法是該類的一部分。 'self'是你正在調用'giveBack'(和'displayIt')的對象的實例。

+0

我知道,我不是存儲實際的方法,這是對我的part.As只是壞的措辭第二句 這是否意味着我正在調用此方法的對象的實例是我正在編寫此方法的類? 因此,如果我要創建一個標題爲「HelloWorld」的Xcode項目,那會是我打電話給'gieBack'方法的對象.. – 2011-12-26 09:08:35

2

我想,你一般是正確的。

但在下面註明:

而且這種方法(名爲「相同的回報」)是我的類名執行(無論我命名的項目)

我無法理解你的意思。

類名只是一個符號(這是人類讀者的文本)。

Objective-C類的方法在方法聲明開始時用-表示法表示。

換句話說,所有方法聲明都以@implementation CLASS_NAME內的-開頭...... @end塊是CLASS_NAME類的實例方法。

當我們調用另一個實例方法(在一個實例方法中)時,我們使用self關鍵字。由於所有Objective C方法調用都必須指定目標對象,在這種情況下,我們正在調用自己(當前的CLASS_NAME實例本身)。所以我們使用self關鍵字。

對不起,我的混亂的話..這是很難解釋,我想:-(

+0

非常感謝你,你是一個很大的幫助。 – 2011-12-26 11:14:59