4

Objective-C の以下のクラスの小さな静的ライブラリを準備したい: クラス A、クラス B、クラス C. これらのクラスを静的ライブラリに含めたい。クラス A は、クラス B またはクラス C のメソッドのパブリック メンバーにアクセスできるようになりました。

上記のライブラリを他のプロジェクトに統合する場合、クラス A とクラス C ではなくクラス B のみにアクセスできるクラス D を用意します。これを行うにはどうすればよいですか?

私の他の疑問は、クラス B で NSString *isValid が宣言されていると仮定することです。

上記の変数にクラス A とクラス C からアクセスできるようにしたいということは、ライブラリのインクルード ファイルが上記の変数にアクセスできることを意味します。

ただし、外部ライブラリから上記の変数にアクセスすることはできません。ライブラリの外部ではなく、ライブラリ自体の内部でアクセスできるようにするにはどうすればプライベートにできますか?

手伝ってくれてありがとう !

4

2 に答える 2

4

パブリック メソッドを静的ライブラリからのみ見えるようにし、外部からは見えないようにすることができます。

方法は次のとおりです。

1) ライブラリの外で使用するヘッダー ファイルを作成する

#import <Foundation/Foundation.h>

@interface ClassA : NSObject 

@property(nonatomic,readwrite)BOOL publicProperty;

-(void)publicMethod;

@end

2) 静的ライブラリによって内部的にのみ使用されるカテゴリを作成します

#import "ClassA.h"

@interface ClassA (Internal)

@property(nonatomic,readwrite)BOOL privateProperty;

-(void)privateMethod;

@end

: このファイルに名前を付けます:「ClassA+Internal.h」

3) .m ファイルでプライベート プロパティとメソッドを再度宣言します。

#import "ClassA.h"

@interface ClassA ()

@property(nonatomic,readwrite)BOOL privateProperty;

-(void)privateMethod;

@end

@implementation ClassA

@synthesize publicProperty;
@synthesize privateProperty;

//...

@end

静的ライブラリ内でプライベート プロパティとメソッドを使用する

ClassB.m ファイルで、ClassA カテゴリのヘッダー ファイルをインポートします。

#import "ClassB.h"
#import "ClassA.h"
#import "ClassA+Internal.h"

ClassA のプライベート プロパティとメソッドにアクセスできるようになりました。

プライベート プロパティとメソッドを使用しないスタティック ライブラリの作成

スタティック ライブラリを作成するときは、"ClassA+Internal.h" カテゴリ ヘッダー ファイルを "ビルド フェーズ"、"ヘッダーのコピー" の "プライベート" または "プロジェクト" ヘッダー セクション内に保持します。

このようにして静的ライブラリをビルドすると、ClassA+Internal.h カテゴリは外部からアクセスできなくなります。

于 2012-08-17T08:47:12.827 に答える
-1

私の知る限り、Obj-Cには、必要に応じてパブリックメンバーへのアクセスを保護する方法はありません。一般的なアプローチは、静的ライブラリとともに出荷するヘッダーファイルにメソッドとivarを含めないことです。ライブラリを自分でコンパイルするには、もちろん完全なプライベートヘッダーを使用する必要があります。

これは、コンパイル時にライブラリのクライアントにクラス構造を認識させる必要があるObjective-C++では機能しないことに注意してください。

于 2012-08-17T07:10:48.033 に答える