頭と尻尾はくれてやる!

パソコンおやじのiPhoneアプリ・サイト作成・運営日記


@propertyでnonatomic指定していいの?

さて、じゃんけんゲームアプリ作成の続き。

iPhoneアプリを作ってみよう:第1回 じゃんけんゲーム(#3.IB+Xcode連携編) - もとまか日記

ここで、jankenViewController.hってファイルに
@property
って記述があります。
ふんふん、コレ前に見たことあるぞ。
Objective-Cのクラス定義を理解しよう - @IT
ここで読んだな。

はて?
@property(nonatomic , retain) 以下略
なんてあるけど、nonatomicってなんだ?

と思い、調べてみました。

Objective-C 2.0プログラミング言語: プロパティの宣言と実装
このページには、

nonatomic
合成されるアクセサが非アトミックになるように指定します。
デフォルトでは、合成されるアクセサはすべてアトミックです。これは、マルチスレッド環境でプロパティへの堅牢なアクセスを可能にすることを意図しています。つまり、getterから返される値やsetterを通じて設定される値は、ほかのスレッドが同時に実行しているかどうかに関係なく必ず完全に取得または設定されます。詳細については、パフォーマンスとスレッドを参照してください。

とあります。
アトミックってなんだ???
さらに、リンク先を見てみると、、、

nonatomic属性の影響は環境によって異なります。デフォルトでは、合成されるアクセサはすべてアトミックです。マネージドメモリ環境では、アトミックな動作を保証するにはロックを使用する必要があります。また、返されるオブジェクトは保持され自動解放されます。このようなアクセサが頻繁に呼び出されると、アトミックな動作はパフォーマンスに重大な影響をもたらすことがあります。ガベージコレクトされる環境では、ほとんどの合成メソッドはこうしたオーバーヘッドなしでアトミックになります。

アトミックな実装の目的は堅牢なアクセサを提供することであり、コードの正確性を保証することではないことを理解することが重要です。「アトミック」とは、プロパティへのアクセスがスレッドセーフであるという意味ですが、単にクラス内のすべてのプロパティをアトミックにするだけでそのクラス(一般にはオブジェクトグラフ)が「スレッドセーフ」になるということではありません。スレッドの安全性を個々のアクセサメソッドのレベルで表現することはできません。マルチスレッドの詳細については、『Multithreading Programming Topics』を参照してください。


うーむ、、、スレッドセーフってなんだよ?
スレッドセーフ - Wikipedia

んー、、、複数のスレッドが共有データに同時に書き換えたりするとまずい、、、
どこかで聞いたような話だな。
PHPならファイルをロックするとかああいうイメージなんだろか?

そもそもiPhoneってマルチスレッドなのか?シングルスレッドなのか?
FLASHがシングルスレッドというのは聞いたことあるんだけど、、、と思って調べると

sonson@Picture&Software - [iPhone SDK] アプリ高速化のための5つのノウハウ

ってあるくらいだからどちらにもなるんだろう。
で、シングルスレッドの方がよい、とな。
シングルスレッドでアプリを作成するとなると、FLASHの場合と同じってことか。
それは都合がよろしい。

シングルスレッドということは、スレッドセーフもくそ(おっと失礼)もないってことか?
つまり、nonatomicで指定しても問題なし、という理解でいいのかな。
とりあえず、そうしておこうっと。

<< Xcodeでのリファレンスでは親のプロパティは見られないの?  TopPage  第449回のBIG1000買いました >>

コメント


管理者にだけ表示を許可する
 

トラックバック

トラックバックURL
http://ringsbell.blog117.fc2.com/tb.php/350-e3673020




Copyright ©頭と尻尾はくれてやる!. Powered by FC2 Blog. Template by eriraha.

FC2Ad