2010-01-19 117 views
0

我有1個NSString * abc = @「Hardik」; 我有NSMutableArray *數組; 現在我寫了[array addobject:abc];然後我打印,NSLog(@「array =%@」,array);與NSString有關的問題

但我得到NULL 爲什麼? 我已經宣佈NSMutableArray *數組;在a.h文件中 我已經設置了@property(nonatomic,retain)NSMutableArray * array; @synthesize array;

和我有綜合它,但獲得價值NULL 我無法理解它?

回答

3

這聽起來像你沒有實際分配array。通常,您可以在初始化程序中執行此操作。 (不要忘了在你的dealloc方法中也加上release。)@synthesize創建了getter和setter,但是你仍然必須自己處理分配/取消分配對象。

4

您還需要初始化您的數組:

array = [[NSMutableArray alloc] initWithCapacity:10]; 

這是非常基本的東西。你讀過「Learning Objective C Primer」嗎?

0

這聽起來像你的NSMutableArray *數組屬性可能沒有被初始化?

你可以發佈你的類的init方法嗎?

0

要在一個類本身內觸發合成存取器,您必須使用self。如果您不這樣做,則直接繞過訪問器方法訪問該屬性的地址。你需要:

NSString *abc = @"Hardik"; 
[self.array addobject:abc]; 
NSLog(@"array = %@", self.array); 

這個很重要的原因是合成的方法通常也會初始化屬性。該合成方法陣列的內部看起來是這樣的:

-(NSArray *) array{ 
    if (array!=nil) { 
     return array; 
    } 
    array=[[NSMutableArray alloc] initWithCapacity:1]; 
    return array; 
} 

self.propertyName實際上只是[self propertyName]self.propertyName=someValue速記僅僅是[self setPropertyName:someValue]簡寫。

,直到調用self.array至少一次,數組屬性沒有初始化

但是,只是爲了混淆事情,一旦您初始化後調用了self.array,那麼您可以直接調用array。所以...

[self.array addObject:abc]; 
NSLog(@"array = %@", array); 

...工作,而逆向會返回一個空的數組。

所以規則是:

  1. 在一個類實現 (包括子類),稱只是 propertyName給你的財產的地址 但不調用 的的getter/setter存取方法。
  2. 在一個類實現 (包括子類),使用 self.propertyName調用 的getter/setter存取方法,但 不直接訪問屬性。
  3. 來自課外 的實現例如 myClass.propertyName調用 getter/setter訪問器方法。