-1

初期クラスのプロパティを定義する場所を知りたいだけですか?

他の言語では、クラスのコンテンツが開始される前に head でいくつかの標準プロパティを定義することに慣れています。

たとえば、ファイルへのパス。設定など。

Objective-C でこれらの初期プロパティに値を入力する場所は?

ありがとう

4

3 に答える 3

2

一般的には次のようなものです。

MyClass.h:

extern NSString * const staticValue1;
extern NSString * const staticValue2;

@interface MyClass : NSObject
{
    NSString *_strval;
    int _intval;
    float _fltval;
}

@property (retain, nonatomic, readwrite) NSString *strval;
@property (assign, nonatomic, readwrite) int intval;
@property (assign, nonatomic, readwrite) float fltval;

@end

MyClass.m:

NSString * const staticValue1 = @"Something";
NSString * const staticValue2 = @"Something else";

@interface MyClass

@synthesize strval = _strval;
@synthesize intval = _intval;
@synthesize fltval = _fltval;

- (id)init
{
    self = [super init];
    if (self != nil)
    {
        [self setStrval:[NSString stringWithFormat:@"This is a %@", @"string"]];
        [self setIntval:10];
        [self setFltval:123.45f];
    }
    return self;
}

- (void)dealloc
{
    [self setStrval:nil];
    [super dealloc];
}

@end

これは、インスタンス変数のメモリを管理するためにここで使用されている合成プロパティの使用を示しています_strval。これには、メモリ リークを回避するために保持/解放が必要です。[self setStrval]は自動解放されたオブジェクト ( から[NSString stringWithFormat) で初期化され、setter メソッドによって保持されることに注意してください。または、必要に応じて、これらのメソッドを次の構文を使用して呼び出すこともできます。

self.strval = [NSString stringWithFormat:@"This is a %@", @"string"];
self.intval = 10;
self.fltval = 123.45f;
于 2012-06-29T16:12:06.580 に答える
1

おそらく、あなたが求めているもののいくつかは、クラス メソッドで実装できます。

+クラス メソッドは(インスタンス メソッドの代わりに) でコーディングされ-、クラスの特定のインスタンスに関連付けられていないため、インスタンス変数を参照できません。

これは、デフォルトの文字列を返すクラス メソッドです。

+ (NSString *)myDefaultString
{
    return @"Some default value";
}

受信者の場所でクラス名を指定して呼び出すだけです。というクラスでメソッドを定義したとMyClassします。次のように呼び出します。

NSString *str = [MyClass myDefaultString];

allocこれには/init呼び出しがないことに気付くでしょう。

于 2012-06-29T16:36:28.297 に答える
0

パブリック プロパティは .h ファイルで定義する必要があります。

@interface MyClass {
}
@property(nonatomic, reatin) NSString *a;//Define as per needs, then synthesise in .m file

@end

プライベート プロパティの場合、.m ファイルでインライン カテゴリを定義する必要があります。

@interface MyClass ()

@property(nonatomic, reatin) NSString *b;//Define as per needs, then synthesise in .m file
@end

@implementation MyClass

@synthesize a = _a;
@synthesize b = _b;


- (void)viewDidLoad {
//You can initialise property here or in init method

self.a = @"Demo1";
self.b = @"Demo2";
}

//Now you can have other code for this class.
@end
于 2012-06-29T16:02:29.143 に答える