2010-09-24 90 views
0

好吧,我創建了自己的類(myObject的)繼承NSObject的目標C,檢查是否對象是不確定的或零

然後在我的代碼我聲明這一點:

MyObject * myObject; 

然後在我的功能進一步下降,我這樣做:

if(myObject == nil) 
{ 
myObject = [self getObject]; 
} 

我的if語句返回false,我希望它是true。

在調試模式下:只是聲明它是用一些隨機值給它分配一個實例。 那麼,我是否必須重寫init函數,以便它返回nil,然後創建我自己的initWith函數?

回答

5

在Objective-C,(或一般C),

MyObject* myObject; 

方法實現內部不不與nil初始化myObject。同樣,

int a; 

0,這是什麼誰由C-人們早就決定初始化a。歷史理性爲何如此。

就明確地將其初始化爲

MyObject* myObject=nil; 

注意的是,在類接口中定義伊娃init被調用之前被自動設置爲zero

更新:還請注意,myObject是一個指針到包含數據的真實對象。所以,如果你只是做

MyObject* myObject; 

這意味着myObject點垃圾內存塊,這將無法正常工作的。

MyObject* myObject=nil; 

使得myObject指向什麼。現在它至少一直沒有做任何事情。這行

MyObject* myObject=[[MyObject alloc] init]; 

確實是在內存中分配MyObject對象,對其進行初始化,然後進行myObject點的記憶正確分配並初始化塊。現在,如果MyObject有,如果你定義了init方法,

@implementation MyObject 
-(id)init { 
     if(self=[super init]) { 
      ... do something ... 
     } 
     return self; 
} 

[super init]後成功執行

@interface MyObject:NSObject { 
    NSString* string; 
} 
@end 

接口,Objective-C的保證伊娃string設置爲nil,即string指向無。但這並不是NSString被分配或初始化。

+0

謝謝大家.. :) – stone 2010-09-24 18:06:33

+0

等等,所以在實例化時沒有使用alloc的一點......我只需要使用init。由於C已經爲它分配了內存。這很糟糕。不是嗎?我不應該在聲明 – stone 2010-09-24 19:11:57

+0

時使用nil否,C不會分配內存。請參閱我添加的說明。 – Yuji 2010-09-24 19:42:12

0

確保您初始化myObject的爲零,像這樣: -

爲MyObject * myObject的=零;

1

申報MyObject的是零:

MyObject *myObject = nil; 

這樣,它不會做任何事情。

相關問題