如何访问变量的值

时间:2012-12-01 15:26:34

标签: iphone objective-c ios

在我的.h文件中

@interface DemoApp : UIViewController   {
    UITextView *textView;
@private

    NSString *status;

    NSInteger *track1Len,*track2Len;


}
@property (nonatomic,retain) NSString *status;

.m档案

    @synthesize status;
- (void)onDecodeCompleted:(NSString *)sts
{
   status=sts;
   NSLog(@"status is %@",status);

}

- (IBAction)processButton:(id)sender
{
   NSLog(@"status is %@",status);
   // here I am getting null value
}

我只是在我的类文件中访问我的变量。在ondecodecompleted方法中,我得到的值是作为参数传递但是在按下进程按钮后我得到空值。

2 个答案:

答案 0 :(得分:2)

在两个地方尝试:self.status

- (void)onDecodeCompleted:(NSString *)sts
{
   self.status=sts;
   NSLog(@"status is %@",self.status);

}

- (IBAction)processButton:(id)sender
{
   NSLog(@"status is %@",self.status);
   // here I am getting null value
}

此外,由于您使用的NSString具有可变子类,因此您应将其标记为copy而不是retain

@property (nonatomic,copy) NSString *status;

答案 1 :(得分:0)

您丢失iVar的原因是因为直接设置变量时,您的变量没有ownership
您需要status = [sts copy];status = [sts retain]取得所有权 如果您没有取得所有权status,则有sts的有效期,这可能不是您想要的。

直接访问iVar通常是一个坏主意,因为每次都需要记住本地内存管理。 最佳做法是将@propertydot syntax一起使用。该属性将根据您将声明的那个来处理setter的内存管理。