3

私はAppleのチュートリアルの1つ(2番目のiOSアプリ)を試していました。基本的に、プライマリデータクラスとデータコントローラークラスがあります。コントローラクラスは、プライマリデータオブジェクトを保持する配列を作成することにより、それらを操作します。

突然これがポップアップします:

「...しかし、「マスターコレクションの作成」タスクは、データコントローラーオブジェクトのみが知る必要があるタスクです。このメソッドは他のオブジェクトに公開する必要がないため、ヘッダーで宣言する必要はありません。ファイル。"

そして、「マスターコレクション」の初期化は、ヘッダーファイルではなくクラス拡張子として.mファイルに表示されることがわかりました。なぜこれをしたいのですか?ヘッダーファイル内で初期化のメソッドを直接宣言することの何が問題になっていますか?

データコントローラーのヘッダーファイル:

#import <Foundation/Foundation.h>

@class BirdSighting;
@interface BirdsSightingDataController : NSObject

@property (nonatomic, copy) NSMutableArray *masterBirdSightingList;
- (NSUInteger)countOfList;
- (BirdSighting *)objectInListAtIndex:(NSUInteger)theIndex;
- (void)addBirdSightingWithName:(NSString *)inputBirdName location:(NSString *)inputLocation;

@end

これは対応する.mファイルです。

#import "BirdsSightingDataController.h"
#import "BirdSighting.h"

@interface BirdsSightingDataController ()

- (void)initializeDefaultDataList; //class extension

@end

@implementation BirdsSightingDataController
...
4

1 に答える 1

2

メソッドを作成する適切な方法は、.m ファイル内のインターフェイスにメソッドを配置することhiddenです。

-

ヘッダー ファイルでこのメソッドを宣言することに「間違い」はありません。必要に応じてこれを行うことができます。

ただし、メソッドをパブリックにする必要がない場合は、プライベート ヘッダー拡張機能を使用して実装ファイル内のメソッドを非表示にすることをお勧めします。これは、他のクラスがこのメソッドを呼び出す必要がない場合、または他のプログラマーがこのメソッドを呼び出す必要がない場合は、メソッドをプライベートまたは非表示にしておくことをお勧めします。

このようなケースは、状況を説明するのに役立ちます:

まず、メソッドを .m ファイルの非表示のインターフェイス拡張子に配置することは、意識的な決定です。別の開発者として、私があなたのコードを見て、実装ファイルの隠しインターフェイス () にメソッドを意識的に配置することを決定したことがわかった場合、このメソッドはこのクラスでのみ使用されていることがわかります...あなたは意図的にこれを行いました。

さらに、他の人が使用する予定の API を開発している場合、または他の開発者と同じコード ベースで作業している場合、クラス自体の外部で特定のメソッドを呼び出す機能が制限されるため、これは良い方法です。つまり、別のオブジェクトから誤ってメソッドを呼び出すことはできません。

于 2012-04-22T21:50:30.343 に答える