NSF*_*NSF 3 iphone objective-c uiviewcontroller ios ios5
可能重复:
如果您在Objective-C中仅使用属性,是否有任何理由声明ivars?
ObjectiveC ivars或@property
我是iPhone编程的新手(以及编程场景).我试图在各个地方研究属性,并发现它们基本上是为其他类创建getter和setter方法以获取对这些对象的访问权限的快捷方式.
现在,我已经看到程序员在@interface之后的花括号中定义对象:UIViewController以及之后的属性,当所有访问都发生在该类的.m文件中时.
现在,那段多余的(?)代码,是否有必要?这是标准吗?期待一些可理解的意见.
先感谢您.
Rob*_*Rob 10
我可以通过多种方式解释您的问题:
问题:为什么有些程序员使用属性和实例变量(花括号中定义的变量),而其他程序员只使用属性,而其他只使用实例变量?
答:如您所知,@property声明会在您出现时为您@synthesize生成getter和setter.从历史上看,这就是它为您所做的一切,您还必须手动声明您的实例变量.之后,编译器得到了改进,因此如果您没有定义实例变量,那么该@synthesize语句也会生成该变量.当这是第一次引入时,通常的做法是定义属性和实例变量,但Apple最终改变了他们的指导方针并鼓励程序员不要定义实例变量,而是让编译器从@property和@synthesize声明生成它自己.
因此,在回答您的问题时:1.为您的属性定义实例变量现在是多余的; 2.不再需要; 现在,标准是不显式声明实例变量,而是让@synthesize语句执行此操作.
顺便说一句,该@synthesize语句的约定是,在一个名为的属性var的情况下,在实例变量名之前加上一个下划线@synthesize var = _var.这样做是为了最小化程序员在预期财产时意外引用ivar的可能性(反之亦然).为了进一步说明这是首选标准,从Xcode 4.4开始,即使@synthesize语句是可选的(因此,定义@property,但没有ivar,没有@synthesize),它将声明和ivar与您的属性相同的名称,除了领先下划线.
问题:为什么有些程序员在.m文件中定义了一些属性和实例变量?为什么其他程序员只在类的自己的.m文件中使用时,会在.h文件中声明它们的一些实例变量和属性.
答案: .m文件中定义的那些实例变量和属性(在所谓的类扩展中)只是定义那些未向世界公布的ivars/properties的便捷方式.在此约定中,您的.h文件只是您的公共接口(可以从其他地方调用哪些属性和方法),而其他所有内容都在.m文件中.这是一种很好的方法来保持你的界面更清洁,所以当你在将来的某个日期使用你的类时,你可以只看一下.h文件,而不要在类的实现细节的细节中迷失方向.
在过去,在类扩展变得普遍之前,我们在.h文件中定义了所有实例变量和属性,即使它们是私有的并且仅在类自己的.m文件中使用.因此,您仍会看到一些执行此操作的代码.
所以,在回答你的问题时,1.使用类扩展并不是多余的(除非你的类扩展是空的,但即使这样我也倾向于保留它,所以我可以看到没有私有的ivars /属性); 2.不需要使用类扩展; 但是,对于仅在类本身内使用的私有属性/变量使用类扩展是一种新兴标准,可能确实代表了最佳实践.
| 归档时间: |
|
| 查看次数: |
200 次 |
| 最近记录: |