PC関係の情報など。あとは雑記。

まとブロ

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

Copyright© まとブロ , 2019 All Rights Reserved Powered by STINGER.