2012-01-28 27 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