2013-05-12 63 views
1

好吧,我已經閱讀了很多有關這個話題的日子,我也很困惑,因爲每次搜索我的答案都不一樣。在iOS中聲明實例變量 - Objective-C

我需要知道在iOS中聲明實例變量的最佳方式。到目前爲止,我知道我應該只在.m文件中聲明它們,並將.h清理乾淨。但我做不到:編譯器給我編譯錯誤。

以下是一些來自.m的代碼。

@interface UIDesign() 

// .m file 
{ 
    NSString *test2 = @"test2"; 
} 

@property (nonatomic, assign) int privateInt; 

@end 

@implementation UIDesign 
{ 
    NSString *test1 = @"test1"; 
} 

這兩個字符串都被錯誤地聲明,我不知道爲什麼。編譯器說:預計';'在聲明清單末尾

所以問題是:我如何聲明實例變量?我只會在課堂上需要他們。

+0

我的朋友,變量聲明不同於定義。 這裏你是在聲明的地方初始化一個變量。 – 2014-05-13 04:51:28

回答

1

您無法初始化實例變量。它們都被初始化爲零或零。所以編譯器在編寫等號時需要一個分號。

你可以在init方法中初始化它們。

+0

我沒有init方法。我應該只是爲了正確設置變量的值嗎? – 2013-05-12 10:45:38

+0

如果你想初始化他們是的。你有。 – Gabriel 2013-05-12 10:52:47

+0

我認爲你不**必須**,但你可以。例如,你可以使用'(void)viewDidLoad'方法來存儲你的init行。因爲這個方法在視圖加載的時候被調用(因爲它說...)。對於我自己而言,我很少在某個viewController中編寫自己的init方法,除非我真的有很多變量。在iOS中,我只是使用viewDidLoad方法來初始化我的變量。 – Lucien 2013-05-12 10:55:43

1

您試圖將實例變量添加到不受支持的類擴展或類別。 [編輯2013年5月12日08年6月11日:在類擴展的ivars都支持,但不是在類別]作爲替代:

@interface UIDesign : NSObject 
@end 

@interface UIDesign() 

@property (nonatomic, assign) int privateInt; 
@end 

@implementation UIDesign 

@synthesize privateInt = _privateInt; 

- (void)someMethod { 
    self.privateInt = 42; 
} 

@end 

在另一方面,如果你只是想聲明實現內部的實例變量,只是做有:

@implementation UIDesign { 
    int _privateInt; 
} 

@end 

編輯:只注意到你也嘗試在這也是不支持的聲明來初始化實例變量。因此:

@interface UIDesign : NSObject 
@end 

@implementation UIDesign { 
    NSString *_test; 
} 

- (id)init { 
    self = [super init]; 
    if(!self) return nil; 

    _test = @"Foo"; 

    return self; 
} 

@end 
+0

我沒有init方法。我應該只是爲了正確設置變量的值嗎? – 2013-05-12 10:48:21

+0

這取決於。如果你的班的正常運作取決於伊娃的初始價值,那麼是的。 – FluffulousChimp 2013-05-12 10:53:17

+0

合成不再需要 – edwardmp 2013-05-12 10:54:36