まとまりのないブログ

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

フレームワークの参照が難しすぎ

mac os用のソフトウェアを作成するためにxcodeを使ってプログラミングをしようとしていたのだけれど、いつも通りプログラミングを始める前の環境構築に苦労した。既存のフレームワークを使うことで手早く …

no image

ZeroLink: unknown symbol '_NSApplicationMain'

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

no image

iOSシミュレータ8.3のカメラロールに画像を追加する

iOSシミュレータ8.3のカメラロールに画像を追加する方法を探ってみたが、見つからない。Finderからiphone simulatorを辿って・・・とやってみても当該の画像が置いてあるフォルダがどこ …

no image

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

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

no image

dyld: Library not loaded: @executable_path

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