5056


objective-cを学んでいて疑問に感じた事があるので、質問させていただきます。  
変数やインスタンスを宣言する場所によって外部に公開されたりされなかったりすると思うのですが。

この”外部に公開”の意味が今ひとつ分かりません

他のクラスやメソッドへ公開されるということでしょうか？  
または、他の開発者の方や他の人に公開されてしまうのでしょうか？


CC BY-SA 3.0
2015-01-22T05:08:15.640
5048
2015-03-25T15:14:10.547
2015-01-22T06:23:20.177
3313
5967
question
objective-c
変数やインスタンスが「外部に公開される」という意味を教えて下さい


「宣言する場所」をヘッダファイル(拡張子.h)と実装ファイル(拡張子.m)の2種類とするならば、  
ヘッダファイルに宣言したインスタンス変数などは、インポート(#import)によって他のファイルでも使える(=公開される)ことになります。  
逆に実装ファイルに宣言したインスタンス変数などは他のファイルでは使えない(=公開されない)ことになります。

上記はファイルレベルでの公開・非公開の話で、実際にはアクセス指定子(@publicや@private)によっても公開・非公開が変わってきます。


CC BY-SA 3.0
2015-01-22T06:15:25.207
5056
2015-01-22T06:15:25.207
7364
5048
answer


ここでの'外部に公開される'とは他のクラスから参照できて実行できるように許可している、という事だと思います。

紳士的に運用しようとしている、ソースコードのある世界では、他のクラスは参照しないと取り決めてあるファイル(処理の実態がある.mなど)に記述すれば直接実行できませんし、他のクラスにインポートして利用してもらうために用意したファイル(.hなど)に記述すればそれは参照され実行できます。

一転、Objective-
Cにおいては、アプリ内で宣言したクラス・メソッド・プロパティの名前だけは、解析用のツールを使うとバイナリであっても他の開発者に全て見られてしまう可能性があります。これは他のアプリからはそうそう実行はできないけれど、その気のある開発者には呼び出す合言葉が見えてしまう状況です。そして、コンパイル結果のバイナリがアプリではなくオブジェクトファイルやフレームワーク(ライブラリ)形式なら勝手にリンクされ合言葉を宣言されそして実行されてしまうかもしれません。


CC BY-SA 3.0
2015-03-25T15:14:10.547
8393
2015-03-25T15:14:10.547
7283
5048
answer