在哪里初始化类中的实例变量

问题描述

| 我是Objective-c的新手,我对全局变量总是有疑问。我不知道在哪里初始化它们。我的问题是与Nsstring。我写了这段代码– 在.h中
Nsstring *session ; // i also  @property(retain,nonatomic) and synthesize ...
viewDidLoad
中,\'
session=@\"HEllo\";
和在
-(IBAction) show@R_755_4045@ions:(id)sender;
{
    NSLog(@\" @R_755_4045@ions 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];