Base SDKとDeployment Targetの意味
詳しく知りたい方はSDK Compatibility Guideを読んでください
(http://developer.apple.com/library/mac/#documentation/DeveloperTools/Conceptual/cross_development)
Weak Linkとは?
- リンクする時ライブラリーにシンボル(変数、関数、クラスなど)が無くてもエラーが出て来ない。
- アプリがロードされる時シンボルが無くてもエラーが出ない。
- それでランタイムにシンボルがあるかどうか確かめてから使わなきゃならない。
Strong Linkとは?
- リンクする時又はロードする時シンボルが無いとエラー出る。
Base SDK バージョンとは?
- 自分のアプリが使う一番高いSDK(又はOS)バージョン
- このバージョンより高いバージョンからある新らしいAPIは使えない。
Deployment Target バージョンとは?
- 自分のアプリが使う一番低いSDK(又はOS)バージョン
- このバージョンより高いバージョンのSDKにあるAPIはWeak Linkされる。
- このバージョンと一緒又は低いバージョンのSDKにあるAPIはStrong Linkされる。
だってどう使うか?
- 自分のアプリが支援するOSの最低、最高バージョンを決める。
- Base SDKに最高バージョンを設定する。
- Deployment Targetに最低バージョンを設定する。
- Weak Linkされるシンボルについてはランタイムに存在するかどうか確かめてから使う。
- Strong Linkされるシンボルはコンパイルタイムにエラーが発生する。
注意事項
- ベースクラスが存在しない場合チャイルドクラスも存在しないことと見なす。
- クラスのインタフェースに定義したデリゲートが存在しない場合アプリの起動時にランタイムエラーが出る。
チップ
- 特定OSバージョンから発生できる問題点をコンパイルエラーとして発生させたい時にはBase SDKを該当OSバージョンに下げてビルドして見ればいい。
Objective-C 2.0でプライベートプロパティー使い方
クラスのヘッターからプロパティーを隠したい時にはクラスエクステンションを使えばいい。
//の意味 A.h
@interface A : NSObject {
}
-(void)setXXX:(int)i;
-(int)xxx;
@end
// A.m
#import "A.h"
@interface A()
@property int m; // HERE
@end
@implementation A
@synthesize m; // AND HERE
-(void)setXXX:(int)i {
self.m = i;
}
-(int)xxx {
return self.m;
}
@end
カテゴリーよりクラスエクステンションがいい理由は
- プロパティーが定義できる。
- メソッドを宣言だけして定義しないとエラーが出る。
オブジェクトファイルのCPUアーキテクチャーの確認方
オープンソースライブラリーをビルドしてXCodeでリンクするとアーキテクチャーが合わないというエラーが出るときがある。下記のようにすると.aファイルの中の .oファイルがどんなCPUアーキテクチャーをターゲットにしてビルドされたのか確認できる。
otool -hv libxxxx.a
マルチリンガルブログに変身
韓国語以外にも日本語、英語のポスティングができるようにブログを整備しました。右上を見ると国旗が見えます。まだまだですが、いつかはすらすら日本語と英語のポスティングができればいいですね。
ちょうど今日PayPalに加入して10万円くらい決済をしたら英語を使う女性から電話がかかりました。ご飯を食べているうちだからあまりにも慌てました。なんで日本語しか出なかったのか。恥ずかしいです。^^;;