Objective-C:getter和setter中+和 - 有什么区别?

时间:2012-06-30 13:17:08

标签: objective-c setter getter

使用有什么区别:

+ (id) myMethod;

// Rather than
- (id) myMethod;

3 个答案:

答案 0 :(得分:1)

使用+将方法声明为类方法,或者可以直接在类上调用的方法,其中类对象。所以当你有这个:

@implementation Foo
+(NSString*)method1 {
  return @"Foo";
}
-(NSString*)method2 {
  return @"Foo";
}
@end

以不同方式调用方法:

[Foo method1];  //=> @"Foo"
Foo* f=[[Foo alloc] init];
[f method2];    //=> @"Foo"

另外需要注意的是,类方法无法访问实例,这意味着它们无法访问任何类型的实例变量。

答案 1 :(得分:1)

@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

答案 2 :(得分:0)

最上面一个是类方法(不需要实例) 第二个是实例变量(附加到特定实例)。

这个答案很好地解释了这些方法:

Method Syntax in Objective C

[MyObject myMethod]; // did not have to create an instance

MyObject* myNewObject = [[MyObject alloc] init] autorelease];
[myNewObject myMethod]; // had to create an instance