1

私はプロパティのIVARを使用していますが、これを行わない場合:プロパティのデフォルトはnilですか?

@interface someClass : NSObject 

@property (nonatomic, retain) NSArray * someArray; 

@end 

@implementation someClass 

@synthesize someArray = _someArray; 

- (void) someMethod 
{ 
    if(self.someArray == nil){ 
     // True on the first call? 
    } 
} 


@end 

_someArrayがするように私はself.someArrayそれをチェック初めて、nilを返しますが、これは保証されていますか?私はイヴァールがnilであることが保証されていることを読んでいます。私はイヴァール(_someArrayはivarではありません)を宣言していないので、いつでもどこでもnilになるかどうかはわかりません。

答えて

4

いつもnilです。 Objective-Cは、クラス内のすべての変数が割り当てられたら、それをnilに初期化します。合成されたイナバルも同じルールに従います。

2

はい、すべてのプロパティ、ivars、および静的変数は、常にnilに初期化されるように定義されています。今度はARCを使用して、__strongのスタック変数(すべてのオブジェクトポインタのデフォルト値は__strong)に引き継がれます。

3

プロパティはインスタンス変数によって自動的に合成されます(デフォルトではnilが返されます)。

関連する問題