3

我在 .h 中声明了一个变量:

@property (nonatomic, retain) NSString *var;

当我使用以下方法调用属性变量时:

 _var = sumthing;

该应用程序崩溃,当我将其称为:

 self.var = sumthing;

它运作良好。

这两种情况有什么区别吗?

注意:我没有使用@synthesize过,因为不需要专门写这个。

4

2 回答 2

2

您应该在使用时使用self.var保留,以便它在内部调用 setter 方法来保留它。如果直接赋值,setter方法不会被调用,释放时会崩溃。sumthing@propertysumthing

基本上 aself.var = sumthing;等价于分配sumthingvar然后保留它(var = [sumthing retain];)。当您直接执行此操作时,它仅执行分配部分而不是保留。所以当被释放时,当你使用并且你的应用程序崩溃sumthing时,你将指向一个已发布的变量。var

如果您仍然想在不使用的情况下使用它self.var,您可以尝试使用_var = [sumthing retain];which could work。

这与 synthesize 无关,因为您不再需要使用它。你可以跳过它。

于 2013-02-01T06:05:32.350 回答
0

Have you @synthesized property of your var with _var..? If not it will directly treat it as var. don't use _var.

于 2013-02-01T06:50:10.950 回答