问题描述
|
我是Objective-c的新手,我对全局变量总是有疑问。我不知道在哪里初始化它们。我的问题是与NSString。我写了这段代码–
在.h中
NSString *session ; // i also @property(retain,nonatomic) and synthesize ...
在viewDidLoad
中,\'
session=@\"HEllo\";
和在
-(IBAction) showInformations:(id)sender;
{
NSLog(@\" informations ok\");
NSLog(@\"my sesison : %@ \",session);
}
但是我的演出信息崩溃了:/我认为会议是空的。请帮助
解决方法
session = @\"hello\";
self.session = @\"hello\";
上面两个语句之间有很大的区别。第一个只是将hello
分配给session
。这里字符串“ 5”是自动释放的,因此当您点击按钮时,“ 6”无效,因为您没有保留“ 6”。但是在第二行使用ѭ10。当使用“ 10”时,它不仅是简单的赋值,实际上是对访问器方法的调用。在这里,您在属性声明中使用了“ 12”。因此,当使用self
时,将调用session
的设置器,并保留它。因此,当您点击按钮时,ѭ6是有效的。
总结是使用权属性,并使用ѭ10来避免很多内存问题。
编辑:正如fluchtpunkt所指出的,此解释不适用于字符串文字。我当时不明白字符串文字在编写时是特殊的。
,尝试使用点语法为属性进行设置:
self.session=@“Hello”;
这将确保适当的内存管理。
,必须在代码中的某个位置对会话进行另一个写访问。类似于session = [NSString stringWith...];
的代码行
因此,找到代码的其他部分,您在其中分配了一些内容给session
变量,然后用适当的内存管理替换了错误的内存管理。问题不在显示的三行之内。
根据您的代码,它应该类似于
self.session = [NSString stringWith...
或者如果您不方便
[session release];
session = [[NSString stringWith...] retain];