-1

使用有什么区别:

+ (id) myMethod;

// Rather than
- (id) myMethod;
4

3 回答 3

1

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

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

这些方法以不同的方式调用:

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

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

于 2012-06-30T13:27:14.180 回答
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
于 2012-07-01T03:19:19.367 回答
0

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

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

Objective C 中的方法语法

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

MyObject* myNewObject = [[MyObject alloc] init] autorelease];
[myNewObject myMethod]; // had to create an instance
于 2012-06-30T13:20:25.963 回答