2011年2月19日土曜日

プロビジョニングプロファイル

プロビジョニング等セキュリティ関連の情報をなんとなくまとめてみました。

ID/プロファイル内容
Bundle IDアプリケーション固有のID。アプリケーション1つに1個。(例:com.apple.iTunes)
App ID開発者がアプリケーションに「Push Notification」「in App Purchase」「Game Center」等へのアクセスを許可・禁止設定する為の挙動を管理するID。
キーチェインでのアクセス識別子となり、それぞれのアプリケーションの挙動を制御する。
アプリケーションの「挙動」について1つ付けられるIDの為、複数アプリケーションをまとめて指定できるワイルドカード指定が認められている。(例:com.apple.*)
ただし、GameCenter等のサービスを許可する時はワイルドカード指定は使えない。つまり各アプリケーションに1個のApp IDを付けなければならない。
プロビジョニングプロファイルデバイスにインストールされて、実行時に正規のルートからインストールされたか確認するための情報を保持するファイル。(App ID/デバイスID/開発者IDを保持)

2011年2月4日金曜日

メモリリークしない為に その1

NSMutableArrayやNSArrayをautorelease以外でメモリ確保した場合、配列を解放しても要素の解放処理が呼び出されるわけではありません。


ar1 = [[NSMutableArray alloc] initWithObjects:@"TEST1", @"TEST2", @"TEST3", nil];
ar2 = [[NSMutableArray alloc] initWithObjects:[SomeClass alloc]
, [SomeClass alloc]
, [SomeClass alloc], nil];

arrays = [[NSArray alloc] initWithObjects:ar1, ar2, nil];



[arrays release]; // ar1 / ar2 とSomeClassがメモリリーク


上記例では、「arrays」の解放しか行っていないので、「ar1」「ar2」「SomeClass」が全てメモリリークとなります。
「TEST1」「TEST2」「TEST3」の文字列はautoreleaseされるので解放の必要はありません。

要素を全て解放すればメモリリークしなくなります。

[ar1 release]; // ar1を解放
// ar2の要素を解放
    for (int i = 0; i < ar2.count; i++) {
    SomeClass* tmp = [ar2 objectAtIndex:i];
    [tmp release];
 }
[ar2 release]; // ar2を解放 [arrays release]; // arraysを解放