Iphone 如何访问变量的值
在我的Iphone 如何访问变量的值,iphone,objective-c,ios,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)onDecodeComp
.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方法中,我得到作为参数传递的值,但在按下process按钮后,我得到的是空值。请尝试:
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(非原子,复制)NSString*状态
您丢失iVar的原因是,当您直接设置变量时,您没有获得该变量的所有权。您需要执行
status=[sts copy]代码>或状态=[sts保留]
获得所有权。
如果您不取得所有权,则状态
将具有sts
的寿命,这可能不是您想要的
直接访问iVar通常不是一个好主意,因为您需要记住每次都要进行正确的本地内存管理。
最佳做法是将@属性
与点语法一起使用。该属性将根据您将声明的设置器负责设置器的内存管理。self.status=sts代码>和读取属性…多年来一直没有必要声明支持IVAR,几个月前合成变量是可选的。您能在第一个函数中nslog sts吗,一开始可能是空的。