我在 .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@propertysumthing
基本上 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.