在我接手的代码中,我看到了以下内容:
我希望有人能解释以下这个问题。我跟原本的开发者交流过,他试图编写更简洁的代码,所以在内存模型中省略了retain(看起来是没有必要的)。
我想知道是否IBOutlet语句基本上像一个 ivar,在此只读(没有setter可用),因此默认的分配内存模型没有任何区别。
如果不希望IBOutlet有任何变化,那么使用没有内存模型的只读属性是否实际上是定义属性的首选方式?
@property (readonly) IBOutlet UIImageView * bgImage;
当我期望一个保留内存模型时:
@property (readonly, retain) IBOutlet UIImageView * bgImage;
我不理解为什么第一个属性定义可以正常工作而不会出现问题。
另外,在dealloc中有一个release
,就像这样:
-(void)dealloc
{
[_bgImage release];
[super dealloc];
}
我希望有人能解释以下这个问题。我跟原本的开发者交流过,他试图编写更简洁的代码,所以在内存模型中省略了retain(看起来是没有必要的)。
我想知道是否IBOutlet语句基本上像一个 ivar,在此只读(没有setter可用),因此默认的分配内存模型没有任何区别。
如果不希望IBOutlet有任何变化,那么使用没有内存模型的只读属性是否实际上是定义属性的首选方式?
(readwrite, retain)
。通常我会这样写@property (nonatomic, retain) IBOutlet UIView *myView
(readwrite 是默认值,所以不需要显式地写出来)。 - Sam(readwrite, nonatomic, retain)
(正如你所说,可以省略显式的readwrite
)。并不是要不尊重你的同事,简洁当然有助于可读性,但有时编写符合大家期望的代码更为重要。如果他按照推荐的方式做了,你就不必花费时间来研究其含义了。虽然这是一件有趣的事情,但你可能本可以在那段时间内完成(更重要的)事情。 - jscs