我认为我无法从其他类中释放我在appDelegate中设置的变量。
示例:
我有一个班级myClass
。
In myClass.m if I do :
appDelegate = [[UIApplication sharedApplication] delegate];
appDelegate.aString = [[NSString alloc] init]; //aString is declared and synthesized in appDelegate class.
[appDelegate.aString stringWithString:@"test"];
[appDelegate.aString release];
NSLog(appDelegate.aString);
我在控制台中得到“测试”。
我做错了什么? :/
答案 0 :(得分:1)
属性aString
的属性是什么?您可能正在使用retain
属性,该属性(顾名思义)将在分配时保留基础对象。因此,在分配到appDelegate.aString
后,您的NSString
保留计数至少为2. NSLog
之后的release
因此将使用对象保留计数至少为1。
附录:你的陈述[appDelegate.aString stringWithString:@"test"];
是空洞的。它在一个实例上调用一个类方法(本身不是一个好主意),但是这个方法返回一个带有内容test
的新字符串。你要求这个字符串,并立即丢弃它。 aString
未通过此方法更改
答案 1 :(得分:1)
您没有正确使用属性。您的代码应为:
appDelegate = [[UIApplication sharedApplication] delegate];
appDelegate.aString = [NSString stringWithString:@"test"]; // This will be retained by your appDelegate
appDelegate.aString = nil; // This will cause your appDelegate to release the variable
NSLog(@"%@",appDelegate.aString); // don't put objects directly in to NSLog
目前,您已经创建了一个自动释放的对象(在stringWithString中),然后通过将其设置为您的属性再次保留它。
答案 2 :(得分:0)
您应该使用XCode中内置的“分析”系统。 转移⌘a - 构建和分析。
它将向您显示漂亮的蓝色箭头,您可以保留,释放和超额/过度变换。