例如,在以下代码中。
@interface TUTViewController : UIViewController
{
NSTimer *timer;
}
@end
和
@interface TUTViewController : UIViewController
@property (weak, nonatomic) NSTimer *timer;
@end
在哪种情况下,我们使用第一种方法来声明变量?
发布于 2014-06-07 01:07:31
你会得到很多关于这一点的意见,通常是作为硬性的快速规则。
示例:
Maddy:永远不要把ivars放在.h里。ivars应该始终是私有的,这意味着它们不属于公共.h。如果创建ivar,请将它们放在.m文件中
我非常尊重麦迪,但在这一点上我不同意他。
如果将iVars放在.m文件中,则它们对其他类隐藏,但也对您创建的子类隐藏。
我更喜欢将我的实例变量标记为@protected,这使得它们可用于子类,但不能用于其他类。
其他人会告诉你要把所有东西都变成属性。在ARC之前,将所有对象保存在属性中是有意义的,因为您可以使用属性上的setter来管理对象上的内存。(为保留的属性赋值时,setter将首先释放所有旧值,然后保留新值。)现在,甚至对于iVars,ARC也会为你做这件事,所以让所有东西都成为属性的理由更少了。
我所做的就是让所有东西都变成iVar,除非:
作为一个策略问题,除非通过一个属性,否则I从不访问另一个对象的iVars。
使用属性而不是实例变量会产生少量但实际的开销。读/写属性总是进行方法调用。iVar直接访问内存,而不需要调用方法。通常,差异太小而无关紧要。但是,如果您正在执行数百万个操作,例如对大图像中的每个像素执行某些操作,或者实时处理视频或音频样本的回调,则差异可能会很大。
https://stackoverflow.com/questions/24086700
复制相似问题