1

ここiPhone/iPad開発の初心者なので、これが奇妙な質問のように思われる場合はご容赦ください。

ビュー内のほとんどのオブジェクト(またはオブジェクトのグループ)でUIViewControllerイベントコールバックを定義する必要があるとすると、コールバックを個別の.mファイルにグループ化し、次にビューコントローラーの#import後にそれらをグループ化するのが合理的であると思われます@implementationか?

nitWithNibName:このように-viewDidLoad、標準メソッドi 、、、、、およびdealloc(Xcodeによって提供される)はshouldAutoRotateInterfaceOrientation:、viewcontroller.mファイルで定義されている唯一のメソッドになります。viewcontroller.mファイルは、イベントコールバックのこのモノリシックな怪物にはならず、保守が簡単になります。私はあなたがあなたのアウトレットの後にそれらを置くと思っています。didReceiveMemoryWarning:-viewDidUnload@synthesize

考え?

4

3 に答える 3

0

モノリシックファイルを作成しているように見えるかもしれませんが、ViewControllerは実際にはこれらすべてのもののための場所です。あなたが提案したことをするなら(それは完全に可能です)、あなたはほとんど何もしないたくさんのファイルになってしまうでしょう。

大きなファイルに整理しておく1つの方法は、次のようにプラグママークを使用してメソッドのグループを分離することです。

#pragma mark lifecycle methods

-(void)dealloc{}
-(id)init{}
-(id)initWithCoder:

#pragma mark target-action

-(id)doSomethingAction:(id)sender{}
-(id)doSometingElse:(id)sender{}

Xcodeはプラグママークを解析し、簡単にアクセスできるようにプルダウンアイテムバーでメソッドをグループ化します。このリストのメソッドもアルファベット順にリストされていることに注意してください。

于 2011-01-01T06:04:39.950 に答える
0

これが1つの選択肢の図です。これはobjcカテゴリを使用しています。

/* File: Header A */
@interface MONViewController : NSViewController
{
    unsigned anIvar;
}

@property (nonatomic, readonly) unsigned anIvar;

- (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)bundle;
- (void)dealloc;

- (void)viewDidLoad;
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation;

/* (continued) */

@end

/* File: Header A or Header B, depending on how you want to organize it */

@interface MONViewController (EventCallbacks)

- (IBAction)triviaButtonWasPressed:(id)sender;

/* (continued) */

@end

/* File: Imp A */
@implementation MONViewController

- (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)bundle { /* ... */ }
- (void)dealloc { /* ... */ }
- (unsigned)anIvar { /* ... */ }

- (void)viewDidLoad { /* ... */ }
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { /* ... */ }

/* (continued) */

@end

/* File: Imp A or Imp B, depending on how you want to organize it */

@implementation MONViewController (EventCallbacks)

- (IBAction)triviaButtonWasPressed:(id)sender { /* ... */ }

/* (continued) */

@end

幸い、コンパイラは、クラスで実行されるように、カテゴリが定義されたときにすべての宣言が定義されていることを確認します。プロトコルなど、適切なクラス実装で定義する必要があるものもあります。

これを大量の小さなファイルに分割する場合は注意が必要です。ビルド時間が大幅に短縮される可能性があります。また、この場合(サブクラス化のため)はやや避けられませんが、この点でのスケーラビリティの問題は、インターフェイス/クラスがやりすぎを試みていることを思い出させるものとして機能し、より小さなコンポーネントに分割する必要があります。幸運を!

于 2011-01-01T06:29:31.943 に答える
0

それらを分離する際に私が目にする問題は、ほとんどのコールバックがクラスローカル変数で機能する必要があることです。操作している@implementationの対応するヘッダーファイルでそれらを宣言する方が便利です。私にとっては、イベント処理をView Controllerに保持し、省略された他の機能を別のファイルに移動する方が理にかなっています...

ただし、発生するものはすべて同じクラスインスタンス変数を使用する必要がある場合があります。つまり、一部のクラス変数を公開する必要がある場合があります。

ジャスティンが提示したカテゴリブレイクアウトはその問題を解決しますが、私には、クラスインスタンス変数を使用すると、技術的に「見る」ことができないのは奇妙に思えます。

于 2011-01-01T07:09:17.263 に答える