まとまりのないブログ

something which something is something

objective-c

メソッドの呼び出しについて

投稿日:

objective-cのメソッドの呼び出し方について調べてみたけれど、どうもよくわからない。定義されたメソッドがいつ、どこで呼ばれているのかということがコードを見渡しただけでは把握することができないためとっつきにくい。たのしいCocoaプログラミングという本についているサンプルコードに以下のコードがある。

#import “AppController.h”

@implementation AppController

– (void)dealloc
{
(省略)
}

– (IBAction)readUrl:(id)sender
{
(省略)
//テーブルビューにデータを読み込み
[tableView reloadData];
}

– (int)numberOfRowsInTableView:(NSTableView*)tableView
{
(省略)
}

//NSTableViewデータソース
– (id)tableView:(NSTableView*)tableView objectValueForTableColumn:(NSTableColumn*)tableColumn row:(int)row
{
(省略)
}

@end

上記の4つのメソッドがサンプルのプログラムには実装されている。
– (void)dealloc はオブジェクトの解放時に呼び出すメソッド
– (IBAction)readUrl:(id)sender はインターフェース上に配置しているボタンをクリックしたときに呼び出すメソッド
– (int)numberOfRowsInTableView:(NSTableView*)tableView はxmlドキュメントのノードの数を取得するときに呼び出すメソッド
– (id)tableView:(NSTableView*)tableView objectValueForTableColumn:(NSTableColumn*)tableColumn row:(int)row はtableviewにデータソースを設定するときに呼び出すメソッド

プログラムは単純なRSSリーダーで、インターフェース上のボタンをクリックしたらテキストフィールドに入力されたRSSのアドレスを読み込んで内容をテーブルビューに表示させるというもの。ただ、コードを見ただけではメソッドがどのようにして呼び出されているかというのがわからない。インターフェース上のボタンをクリックすると- (IBAction)readUrl:(id)senderが呼び出される。呼び出された後はXMLの解析がされてメソッドの最後に[tableView reloadData];を呼び出す。この部分で- (int)numberOfRowsInTableView:(NSTableView*)tableViewと- (id)tableView:(NSTableView*)tableView objectValueForTableColumn:(NSTableColumn*)tableColumn row:(int)rowを呼び出している。[tableView reloadData];を呼び出すとさっきの二つのメソッドが呼び出されるということを知らないとコードを見ただけでは迷子になってしまう。さらにtableViewがインターフェース上に表示された時点でも先ほどの二つのメソッドが呼び出される。ちょっとわかりにくいなぁ・・・。

-objective-c

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

関連記事

no image

xcode の Code Sign error

しばらく振りにアプリのアップデートをするために実機テストをしてみたところprovisioning profileのエラーが出てビルドできなくなっていた。あたらしいファイルをダウンロードしてxcodeで …

no image

dyld: Library not loaded: @executable_path

dyld: Library not loaded: @executable_path/../Frameworks/Connection.framework/Versions/A/Connection …

no image

nsmutablearrayの参照コピー仕様

参照コピー・・・というものに慣れていなくて戸惑った。実体を複製するわけではなくて、実体のもつアドレスつまり参照だけコピーするので、コピーされたものに対して変更を加えようとするとコピー元のオリジナルに変 …

no image

ZeroLink: unknown symbol '_NSApplicationMain'

[Session started at 2008-03-21 00:22:13 +0900.] ZeroLink: unknown symbol ‘_NSApplicationMain&# …

no image

デリゲートメソッドを呼ぶにはデリゲートの設定がいる:- (void)applicationDidFinishLaunching:(NSNotification *)aNotification

OS X 10.4.11 Xcode 2.4.1 でのこと。 cocoaでアプリケーションが起動した後に呼ぶapplicationDidFinishLaunchingがどうやっても呼ばれないから相当悩 …