如果我将一个对象添加到属性“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仍为空,为什么?
答案 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)
问题出现在代码的其他部分