在何处初始化类中的实例变量

时间:2011-05-25 16:20:34

标签: iphone objective-c

我是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我认为是空的。请帮忙

3 个答案:

答案 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来避免许多内存问题。

编辑:正如fluchtpunkt所指出的,这种解释对字符串文字无效。在写这篇文章时,我不在乎字符串文字是特别的。

答案 2 :(得分:0)

代码中的某个地方必须有对会话的另一个写访问权限。一行看起来像session = [NSString stringWith...];

的代码

因此,找到代码的其他部分,在其中为session变量分配内容,并用适当的内存管理替换错误的内存管理。问题不在您展示的三行中。

根据您的代码,它应该是

self.session = [NSString stringWith...

或者如果你喜欢它不方便

[session release];
session = [[NSString stringWith...] retain];