我从一本书( Mac OS X的Cocoa编程)中自学了Objective-C,但是我已经有一半了但是我有两个问题没有在书中得到解答或定义。
定义类方法时(假设存在于.h文件中)有什么区别:
- (int)人口;
+(int)population;
我目前看到的方式是-
方法需要先分配和初始化类,但可以静态调用+
而无需分配和初始化。例如。 (在另一个类的函数中)
// Using -
Earth *world = [[Earth alloc] init];
int population = [world population];
// Using +
int population = [Earth population];
如果这是正确的,我什么时候应该使用静态方法,这样做有什么不利之处。
在函数参数中定义var或在函数中定义var时,是否使用*表示var将是一个对象?例如(再次在头文件中。)
- (void)setPopulation :( NSNumber *)人口; //使用*作为人口是NSNumber
- (void)setPopulation:(int)population; //人口不是一个类,所以不需要*
很抱歉,如果我的任何术语在Objective-C方面没有意义,例如静态方法等。我是PHP和Ruby程序员。
答案 0 :(得分:21)
Objective-C的方法声明中的 - / +只是表示该方法是类方法还是实例方法。例如,使用Objective-C,您无法向实例发送声明为类方法的消息。例如:
@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教程和指针来了解更多。
答案 1 :(得分:0)
答案 2 :(得分:0)
+声明是一个类方法,你不需要实例来调用它。构造函数/工厂方法需要是类方法。 - 声明了一个实例方法,对单个实例进行操作。每个实例都有自己独立的状态(成员变量)。这是面向对象编程的根本区别!通常,大多数方法实例方法,实用程序类除外。