0

解決

と を区別しませんでしinstance variablesinstance methodsinstance variablesJavaとは異なり、インターフェースでも定義できる点をちょっと見逃しました:)

#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

クラス メソッドとインスタンス メソッドの両方が同じ場所で定義されます。+/- 文字は、メソッドの種類を示します。

コメントが指摘したように、中括弧は ivar を定義するためのものです。したがって、インターフェースは次のようになります。

@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 に答える