使用有什么区别:
+ (id) myMethod;
// Rather than
- (id) myMethod;
使用 a+
将方法声明为类方法,或者可以直接在类上调用的方法,其中类是对象。所以当你有这个时:
@implementation Foo
+(NSString*)method1 {
return @"Foo";
}
-(NSString*)method2 {
return @"Foo";
}
@end
这些方法以不同的方式调用:
[Foo method1]; //=> @"Foo"
Foo* f=[[Foo alloc] init];
[f method2]; //=> @"Foo"
需要注意的另一件事是类方法无法访问实例,这意味着它们无法访问任何类型的实例变量。
@Linuxios 几乎总结了类和实例方法的概念。但是,由于您在标题中提到了 getter 和 setter,我想指出,在 Objective-C 中,您可以使用属性而不是编写自己的访问器方法。例如,
在头文件中,您将拥有如下内容:
@interface MyObject : NSObject
@property (nonatomic,retain) NSSet* mySet;
@end
在 m 文件中,您将拥有如下内容:
@implement MyObject
@synthesize mySet;
@end
要访问另一个类中的集合,您可以这样做:
myObject.mySet; // assuming myObject is an instance of the MyObject class
第一个是类方法(不需要实例)第二个是实例变量(附加到特定实例)。
这个答案很好地解释了这些方法:
[MyObject myMethod]; // did not have to create an instance
MyObject* myNewObject = [[MyObject alloc] init] autorelease];
[myNewObject myMethod]; // had to create an instance