NSLog语句不打印我的对象

时间:2012-01-28 09:00:39

标签: objective-c

如果我将一个对象添加到属性“dreamsArr”,这是NSMutableArray:

@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打印“null”? 当我跟踪这段代码时,在[self.dreamsArr addObject:d1]之后,dreamsArr仍为空,为什么?

2 个答案:

答案 0 :(得分:0)

因为您在%s语句中使用了char数组占位符(NSLog)而不是用于打印NSString的对象。试试这个:

NSLog("%@", chTitle);

此外,除非您使用ARC,否则viewDidLoad方法的第2行和第4行会出现泄漏。

以下行有泄漏

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

泄漏来自title属性的赋值,我认为@property具有retain修饰符。 alloc调用会创建一个具有+1保留计数的对象,而赋值则为+2。由于您没有在方法中使用下面的release调用来平衡它 - 您会收到泄漏。第4行也是如此:

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

以相同的方式产生泄漏。

仅当您未在dreamsArr方法中发布viewDidUnload实例变量且在title dealloc方法中发布Dream实例变量时,泄漏才有效} class。

答案 1 :(得分:0)

问题出现在代码的其他部分