在我的.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方法中,我得到的值是作为参数传递但是在按下进程按钮后我得到空值。
答案 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通常是一个坏主意,因为每次都需要记住本地内存管理。
最佳做法是将@property
与dot syntax
一起使用。该属性将根据您将声明的那个来处理setter的内存管理。