我是Objective-c的新手,我总是遇到全局变量的问题。我不知道在哪里初始化它们。我的问题是NSString。我写了这段代码 -
in .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我认为是空的。请帮忙
答案 0 :(得分:0)
尝试使用属性的点语法设置它:
self.session=@“Hello”;
这将确保适当的内存管理。
答案 1 :(得分:0)
session = @"hello";
self.session = @"hello";
上述两个陈述之间存在巨大差异。第一个只是将hello
分配给session
。此处字符串hello
已自动释放,因此当您点按按钮时session
无效,因为您尚未保留session
。但是在第二行self
被使用。使用self
时,它不仅仅是一个简单的赋值,它实际上是对访问器方法的调用。这里您在属性声明中使用了retain
。因此,当使用self
时,会调用session
的setter来保留它。因此,点击按钮时session
有效。
夏季是使用正确的属性并使用self
来避免许多内存问题。
答案 2 :(得分:0)
代码中的某个地方必须有对会话的另一个写访问权限。一行看起来像session = [NSString stringWith...];
因此,找到代码的其他部分,在其中为session
变量分配内容,并用适当的内存管理替换错误的内存管理。问题不在您展示的三行中。
根据您的代码,它应该是
self.session = [NSString stringWith...
或者如果你喜欢它不方便
[session release];
session = [[NSString stringWith...] retain];