2012-01-06 10 views
0

私は "Big Nerds Ranch" Objective-Cの本を使って作業しており、オブザーバーがタイムゾーンの変更を聞いて彼らがメソッドを作成するように設定していますしかし、zoneChangedという.mファイルの中で.hで宣言する必要はありませんでした。メソッドは宣言されずにどのように使用できますか?それはオブザーバーによって誘発されることだけだったからでしょうか?いくつかのメソッドは.hファイルで宣言されていません

.mファイルにメソッドを宣言すると、それはプライベートになりますが、.mファイルでは宣言されていないようです。

答えて

1

宣言されていないメソッドはどのように使用できますか?

彼らがやっていることは、定義そのものを直接提供することです。問題は、ヘッダーファイルで宣言されていない場合、このファイルに依存する他のファイルは、zoneChanged関数が存在することを認識していないことです。ただし、キーワードexternでリンクすることはできますが、これは別の話です。

コンパイラに関する限り、関数は現在のコンパイル単位内にあることを知っている必要があります。それ以外の場合、コンパイラは不平を言います。場合は、関数を宣言する場合は、コンパイラは、どこに定義されていることを約束しているかもしれませんが、呼び出しのポイントの前にされていない可能性があります。そして定義を与えないと、リンカーは不平を言う。

+0

zoneChangedはオブザーバとしてそのファイルでのみ使用され、他のファイルでは使用されないため、宣言する必要はありませんか? – Bot

関連する問題