9

クラス拡張機能を独自の.hファイルに配置#importし、クラスのメソッドとプロパティのさまざまなレベルの可視性を選択的に取得することは意味がありますか? これが悪い考えである (またはうまくいかない) 場合、その理由は何ですか?

4

2 に答える 2

15

これは素晴らしいアイデアであり、正確にクラス拡張が設計された理由 (およびそれらがカテゴリと異なる理由) です。

つまり、次のことができます。

フー。

@interface Foo:NSObject
...public API here...
@property(readonly, copy) NSString *name;
@end

Foo_FrameworkOnly.h

@interface Foo()
@property(readwrite, copy) NSString *name;
@end

Foo.m

#import "Foo.h"
#import "Foo_FrameworkOnly.h"

@interface Foo()
... truly implementation private gunk, including properties go here ...
@end

@implementation Foo
@synthesize name = name_;
@end

そして、Foo_FrameworkOnly.h をインポートする実装ファイルに対してのみ、パブリックに読み取り専用でプライベートに読み書きできるプロパティを効果的に持っています。

于 2011-08-18T16:38:34.830 に答える
-2

Objective-Cのクラス拡張(サブクラス化ではなく)は、Categoriesを使用して実行されます。Xcodeで、[ファイル]>[新規]>[ファイル]に移動し、[Objective-Cカテゴリ]を選択します。カテゴリの名前と拡張するクラスを尋ねられます。インターフェースと実装をそれぞれ配置するための.h/.mペアを取得します。拡張機能で提供される機能にアクセスしたい場合は、その.hファイルをインポートするだけです。

于 2011-08-18T16:31:41.130 に答える