我在 .h 中声明了一个变量:
@property (nonatomic, retain) NSString *var;
当我使用以下方法调用属性变量时:
_var = sumthing;
该应用程序崩溃,当我将其称为:
self.var = sumthing;
它运作良好。
这两种情况有什么区别吗?
注意:我没有使用@synthesize
过,因为不需要专门写这个。
我在 .h 中声明了一个变量:
@property (nonatomic, retain) NSString *var;
当我使用以下方法调用属性变量时:
_var = sumthing;
该应用程序崩溃,当我将其称为:
self.var = sumthing;
它运作良好。
这两种情况有什么区别吗?
注意:我没有使用@synthesize
过,因为不需要专门写这个。
您应该在使用时使用self.var
保留,以便它在内部调用 setter 方法来保留它。如果直接赋值,setter方法不会被调用,释放时会崩溃。sumthing
@property
sumthing
基本上 aself.var = sumthing;
等价于分配sumthing
给var
然后保留它(var = [sumthing retain];
)。当您直接执行此操作时,它仅执行分配部分而不是保留。所以当被释放时,当你使用并且你的应用程序崩溃sumthing
时,你将指向一个已发布的变量。var
如果您仍然想在不使用的情况下使用它self.var
,您可以尝试使用_var = [sumthing retain];
which could work。
这与 synthesize 无关,因为您不再需要使用它。你可以跳过它。
Have you @synthesized property of your var with _var..? If not it will directly treat it as var. don't use _var.