无法释放我的appDelegate变量

时间:2011-08-31 11:11:15

标签: iphone objective-c ios cocoa-touch

我认为我无法从其他类中释放我在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);

我在控制台中得到“测试”。

我做错了什么? :/

3 个答案:

答案 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 - 构建和分析。

它将向您显示漂亮的蓝色箭头,您可以保留,释放和超额/过度变换。