2013-02-28 71 views
5

我對Objective C和iOS非常陌生,目前正嘗試使用iOS 6 SDK學習應用程序開發。當我在.m文件中訪問時,我實際上無法包裹頭的一個概念是「_variable」和「self.variable」之間的區別。他們是一樣的嗎?還是不同?Objective-C中_variable和self.variable有什麼區別?

下面是一個簡單的示例

MyClass.h

#import <Foundation/Foundation.h> 

@interface MyClass : NSObject 
@property (strong, nonatomic) NSString *myName; 
@end 

MyClass.m

#import "MyClass.h" 

@interface MyClass() 
@property (nonatomic, strong) NSString *anotherName; 
@end 

@implementation MyClass 
- (void) myFunction { 
    _myName = @"Ares"; 
    self.myName = @"Ares"; 

    _anotherName = @"Michael"; 
    self.anotherName = @"Michael"; 
} 
@end 

那麼,有在上述實施方式中的差來設置一個變量? 變量「myName」是公開的,而「anotherName」是私人的。

將不勝感激任何投入。謝謝!

+2

[self.ivar和ivar之間的區別?](http://stackoverflow.com/q/4142177/),[自我和正常變量之間的區別](http://stackoverflow.com/q/ 536388 /),[Properties and accessors](http://stackoverflow.com/q/6085080/),[Ivar property,access via self?](http://stackoverflow.com/q/4088801/), [何時訪問屬性](http://stackoverflow.com/q/4271657/),[使用合成獲取器時,「self.foo」和「foo」之間的(風格)區別是什麼?](http: //更多](http://stackoverflow.com/search?q=%5Bobjc%5D+self.ivar) – 2013-02-28 07:40:16

+2

其實這個問題不是重複的。作爲初學者,我尋找了_variable和self.variable之間的區別。我會忽略那些不使用下劃線的問題,所以這是我唯一的問題。但是,@Josh,你的評論無論如何幫助我,理解他們是同樣的事情。 – Arjan 2014-02-20 09:18:40

+0

下劃線不會輕微改變ivars的性質或功能:[Cocoa/ObjC類中的變量前的下劃線如何工作?](http://stackoverflow.com/q/822487) – 2014-02-20 19:22:58

回答

13

的不同之處在於:

_變量名是實例變量。

self.variable正在調用對象的getter方法。

在你的例子中,實例變量是自動生成的,你也不需要綜合你的屬性。

,如果你不使用ARC-

self.variable如果您標記與retainstrong _variable屬性完全不涉及內存管理將保留對您的對象在你的榜樣,真正重要的區別進場

+0

使用你的例子中的大括號可能會讓初學者感到困惑!我會堅持'self.variableName' – jrturton 2013-02-28 07:34:09

+1

你能解釋你的最後一句話嗎? 「'self.variable'將爲你保留一個對象,如果你用'retain'或'strong'標記屬性''_variable'根本不處理內存管理」 – alternatiph 2015-08-13 08:19:18