0

解决方案

我没有区分instance variablesinstance methods。我有点错过了instance variables也可以在接口中定义的点,不像 Java :)

#import "AnyHeaderFile.h"
@interface ClassName : SuperClass {
    NSString *myVar;
}
+ (anytype)doIt;
- (anytype)doItA:(anytype)a;
@end

原始问题

我刚刚开始学习 ObjC 并且正在阅读备忘

因此,接口将实例变量和类变量用{ instance methods } class methods. 所以这样的定义应该完全无效吧?既然接口定义不需要使用+-来定义自己为实例和类方法?

#import "AnyHeaderFile.h"
@interface ClassName : SuperClass {
    + (anytype)doIt;
}
- (anytype)doItA:(anytype)a;
@end

在我尝试代码之前,我试图让理论的基本原理正确。

4

2 回答 2

2

类方法和实例方法都定义在同一个地方。+/- 字符表示它是哪种方法。

正如评论指出的,大括号用于定义 ivars。所以你的界面应该是这样的:

@interface ClassName : SuperClass  
{
    //Define your ivars here. 

    //Remember that in object oriented programming a class will have instance variables 
    //and methods. (In obj-c ivars can also be exposed as properties, which is a way of 
    //wrapping the access in a (perhaps auto-generated) method.)

    //ivars defined in the header can be accessed 
    //by subclasses - default 'protected' scope. 
}

+ (anytype)doIt;
- (anytype)doItA:(anytype)a;

@end

调用类方法:

//This sends a message to the ClassName singleton object. 
[ClassName doIt]; 

调用实例方法:

ClassName instance = [ClassName alloc] init];
//This sends a message to the instance of a class defined by ClassName
[instance doItA:someArgument];  
于 2013-05-24T02:37:50.350 回答
2

如果你想要一个静态方法,你试试这个代码:

#import "AnyHeaderFile.h"
@interface ClassName : SuperClass
   + (id)instance;
@end
@implementation ClassName
static id _instance;
+ (id)instance {
   if (!_instance) {
      _instance = [[SomeClass alloc] init];
   }
   return _instance;
}
//...
@end
于 2013-05-24T02:17:57.850 回答