0

在我的.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 方法中,我得到了作为参数传递的值,但是在按下进程按钮后,我得到了空值。

4

2 回答 2

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
}

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

@property (nonatomic,copy) NSString *status;

于 2012-12-01T15:28:27.707 回答
0

您丢失 iVar 的原因是因为您在ownership直接设置变量时没有获得变量。
您需要做status = [sts copy];ORstatus = [sts retain]以获得所有权。
如果您不拥有所有权,那么它status的寿命sts可能不是您想要的。

直接访问 iVar 通常不是一个好主意,因为您需要记住每次都正确执行本地内存管理。
最佳做法是使用您的@propertywith dot syntax。该属性将根据您将声明的设置来处理设置器的内存管理。

于 2012-12-01T15:44:00.037 回答