2013-04-12 69 views
0

您可以像這樣聲明一個變量。具有屬性&合成的實例變量,以及一個沒有它們的屬性 - ARC

案例1:

@interface MyClass : NSObject 
{ 
    NSString *str; 
} 

@end 

另外,如果你要設置其屬性,你可以做

案例2:

@interface MyClass : NSObject 
{ 
    NSString *str; 
} 
@property (nonatomic, strong) NSString *str; 

@end 

而在.M,

@synthesize str; 

我的理解與差異情況1和情況2之間的情況是,情況2中的綜合和有價值變量可以從另一個類訪問,當這個另一個類實例化這個類時。

案例1和案例2有什麼不同?說這些變量只用於.m文件時。你設置'str'屬性的事實可能會有所作爲,但是如何呢?如果你沒有設置財產,他們將如何與ARC發佈?

回答

1

在這種情況下,由於設置方式的不同,這些差異相當混亂。

此外它使用的是現在的舊做法。

(由蘋果公司提出)這樣的新建議的方法是做到這一點...

MyClass.h

@interface MyClass : NSObject 

@property (nonatomic, strong) NSString *str; 

@end 

MyClass.m

#import "MyClass.h" 

@implementation MyClass 

@end 

您不再需要@synthesize作爲Xcode(從4.5開始)會自動爲你生成這些。

這樣做會設置名爲str的屬性和名爲_str的iVar。

您現在不再需要擔心定義多個ivars和屬性等......只需使用屬性即可完成。

的財產STR應該是這樣的一個例子setter方法...

- (void)setStr:(NSString*)str 
{ 
    _str = str; 
} 
+0

如果你想使用它沒有去'self.str' – Fonix

+0

因此,對於所有的實例,你仍然需要'@ synthesize'變量,我最好宣佈它的財產?我不應該在波形括號之間聲明任何實例變量? – Rocky

+0

@Fonix不,你不知道。合成現在由編譯器「假設」,並設置一個帶下劃線的ivar。洛奇,我現在只使用屬性。現在有了「正確」的方式。這是更個人的偏好。但我發現在ARC中更容易管理屬性,並控制它們的保留方式等。 – Fogmeister

相關問題