为什么我的变量不在方法之间持续存在? - 苹果手机

时间:2011-06-05 20:27:06

标签: iphone variables methods persistence

标题文件:

NSString *righta;
@property(nonatomic, retain) NSString *righta;

(我通常不会为我的变量做@property声明,但认为这可能有助于变量在类中持续存在,尽管它没有)

实施文件:

@synthesize righta;

- (void) function1 {
     righta = [NSString stringWithFormat:@"A"];
}

- (IBAction)function2:(id)sender {
     NSLog(@"righta is still %@", righta);
}

在第二个函数中尝试访问字符串的值时,我收到“EXC_BAD_ACCESS”并且应用程序崩溃。

任何帮助都会非常感激。

谢谢!

3 个答案:

答案 0 :(得分:2)

您必须使用

self.righta  = [NSString stringWithFormat:@"A"];

要分配变量,否则不使用访问者,并且不保留该值。

答案 1 :(得分:2)

stringWithFormat返回一个自动释放的对象。你必须保留它。请注意,您正在访问ivar directy,而不是属性,因此不会保留字符串。请改用该属性:

self.righta = [NSString stringWithFormat:@"A"];

有些程序员喜欢用不同的ivar名称合成他们的属性,以避免错误地直接访问ivar。

@synthesize righta = righta_;

答案 2 :(得分:1)

将function1更改为:

self.righta = [NSString stringWithFormat:@"A"];

你直接指派到右边的ivar而不保留字符串。