2012-01-28 50 views
0

如果我的對象添加到財產「dreamsArr」,這是NSMutableArray中:的NSLog語句不打印我的對象

@synthesize dreamsArr; 

-(void) viewDidLoad 
{ 
    Dream *d1 = [[Dream alloc] init]; 
    d1.title = [[NSString alloc] initWithString:@"my 1st dream"]; 

    self.dreamsArr = [[NSMutableArray alloc] init]; 
    [self.dreamsArr addObject:d1]; 

    Dream *dr = [self.dreamsArr objectAtIndex:0]; 
    NSString *title=dr.title; 

    const char *chTitle = [title UTF8String]; 
    NSLog(@"%s", chTitle); 
} 

爲什麼的NSLog打印「空」? 當我跟蹤這段代碼後,[self.dreamsArr addObject:d1],dreamsArr仍然是空的,爲什麼?

+2

看起來好像沒什麼問題,但你泄露的東西,也不需要焦炭魔法,只是的NSLog(@「的稱號:%@」,dr.title)並查看它是否也爲空。 – mit3z 2012-01-28 09:06:12

+1

是否有可能在你的'Dream'類中擁有自己的'init'實現?如果是這樣:你用'return self'結束它嗎? – 2012-01-28 10:59:55

回答

0

問題是在代碼的另一部分

0

因爲您在NSLog語句中使用char數組佔位符(%s),而不是用於打印NSString的對象。試試這個:

NSLog("%@", chTitle); 

而且,除非你使用ARC,你有第二和viewDidLoad方法的第四線泄漏。

下面的線具有泄漏

d1.title = [[NSString alloc] initWithString:@"my 1st dream"]; 

泄漏來自標題屬性的分配,其中(i假定)是@propertyretain改性劑。調用alloc創建一個帶有+1保留計數的對象,而賦值使其成爲+2。由於您在方法中未使用release調用進行平衡,所以您會發現泄漏。第4行同樣如此:

self.dreamsArr = [[NSMutableArray alloc] init]; 

它以相同的方式產生泄漏。

泄漏是有效的只有如果你沒有在viewDidUnload方法,在你Dream類的dealloc方法title實例變量釋放你dreamsArr實例變量。

+0

親愛的,@Eimantas,什麼泄漏? – 2012-01-28 09:37:39

+1

請參閱答案的更新。 – Eimantas 2012-01-28 10:56:25

+0

thnks,但它都是關於釋放屬性。爲什麼dreamArr在[self.dreamsArr addObject:d1]後仍然爲空 – 2012-01-28 11:26:39