例如,在以下代码中。
@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直接访问内存,而不需要调用方法。通常,差异太小而无关紧要。但是,如果您正在执行数百万个操作,例如对大图像中的每个像素执行某些操作,或者实时处理视频或音频样本的回调,则差异可能会很大。
发布于 2014-06-07 02:36:26
我强烈建议使用@properties,除非有很好的理由不这样做。诚然,这是一场宗教讨论,而不是技术讨论,但由于我们可能都是Mac狂热的追随者,如果苹果更喜欢你使用@properties,那就是标准。在我看来,苹果文档和Xcode都不像ReSharper在Visual Studio中那样推动标准(例如,当您不使用var时,它会发出警告)。这很遗憾,因为这会让我更容易在别人之后拿起代码。
有一种方法可以在.m文件中“隐藏”@属性,你应该这样声明它:
@interface ABCMySpiffyClass ()
@property (weak, nonatomic) IBOutlet UIImageView *spiffyImage;
@property (weak, nonatomic) IBOutlet UILabel *spiffyTitle;
@end
这些并不是您的类的另一个使用者的完全私有的,但乍一看它是隐藏的。这应该会告诉其他开发人员,他或她不应该使用它们。我认为public/private更多地与文档有关,因为它与大多数应用程序的应用程序安全性有关。
https://stackoverflow.com/questions/24086700
复制相似问题