Objective-C Clarification; -/+ and *var
我正在从一本书(MacOSX的Cocoa编程)中教自己Objective-C,大约已经完成了一半,但是我有两个问题没有在书中回答或定义。
定义类方法时,两者之间的区别是什么(假设在.h文件中):
-(int)人口;
+(int)人口;
我现在看到的是,
1 2 3 4 5 6 | // Using - Earth *world = [[Earth alloc] init]; int population = [world population]; // Using + int population = [Earth population]; |
如果这是正确的,我应该在什么时候使用静态方法,它们是否是这样做的任何缺点。
当在一个函数参数中定义一个var,或者在一个函数中定义一个实际的var时,使用*表示var将是一个对象吗?例如(同样在头文件中)。
-(void)setpopulation:(nsnumber*)population;//使用*作为population是nsnumber
-(void)setpopulation:(int)population;//population不是类,因此不需要*
抱歉,如果我的任何术语在Objective-C领域(如静态方法等)没有意义,我是一个PHP和Ruby程序员。
Objective-C方法声明中的-/+只表示该方法是类方法还是实例方法。例如,对于Objective-C,不能向实例发送声明为类方法的消息。例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | @interface MyObject : NSObject -(void)myInstanceMethod; +(void)myClassMethod; @end // ... MyObject* obj = [[MyObject alloc] init]; [obj myInstanceMethod]; // this is okay [obj myClassMethod]; // this will fail [[obj class] myClassMethod]; // this is okay [MyObject myClassMethod]; // this is okay [MyObject myInstanceMethod]; // this will fail |
关于问题的第二部分,objective-c是C的一个严格的超集。它添加类,但它们实际上是C数据结构,其实现被objective-c运行时隐藏。因此,类总是表示为指针。在C语言中,*表示变量被声明为指向某个内存地址的指针。也可以在C中使用带有基元类型的指针,但Objective-C对象必须始终由指针引用。
有很多很好的教程/介绍指向那里。我建议简单的谷歌C教程和指针学习更多。
+声明是一个类方法,不需要实例来调用它。构造函数/工厂方法必须是类方法。-在单个实例上声明了实例方法和操作。每个实例都有自己的独立状态(成员变量)。这是OO编程的基本区别!通常,使大多数方法成为实例方法,实用程序类除外。
您可以看到一些关于何时使用静态方法的讨论,我应该在何时编写静态方法?