プログラミング言語/Objective-C
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
*Objective-C [#m05c3047]
完全なC互換。CocoaはObjective-CのAPI。~
Cocoaについて学べば必然的にObjective-Cについて学べます。~
主な開発環境はXcode(または旧Project Builder)。
#contents
一般的な Object 指向の思想を理解している前提の元に文法事...
**予め定義された型と変数 [#predefined]
Objective-C では新たに次の様な型が定義されている(objc-cl...
-id(任意のレシーバを表す型)
-SEL
-IMP
-Method
-Class
-BOOL
言語構造上の変数は
-nil
-self
-super
-YES
-NO
など。
**クラス(class) [#class]
定義は.hファイル、実装は.mファイルに書く。Xcode だと自然...
>&color(#007900){// MyObject.h};~
''&color(#CB0094){@interface}; MyObject : NSObject{''~
''}''~
''&color(#CB0094){@end};''~
>&color(#007900){// MyObject.m};~
''&color(#CB0094){@implementation}; MyObject''~
''&color(#CB0094){@end};''
Objective-C では C との区別のため、拡張した文法は@を付け...
新たなクラスを定義する場合は一般に NSObject を継承して定...
*** 命名規約(クラス) [#classname]
クラスは大文字で始める。自身のクラスに接頭辞を付ける際、
NS(NeXTSTEP)や IO(Input-Output)や OS(Operating Syste...
**メッセージ(message)/メソッド(method) [#method]
先程のクラスに、インスタンス変数 obj、クラスメソッド myCl...
>&color(#007900){// MyObject.h};~
&color(#CB0094){@interface}; MyObject : NSObject{~
''&color(#CB0094){id}; obj;''~
}~
''+(&color(#CB0094){void};)myClassMethod;''~
''-(&color(#CB0094){id};)myMethod;''~
&color(#CB0094){@end};~
>&color(#007900){// MyObject.m};~
&color(#CB0094){@implementation}; MyObject~
''+(&color(#CB0094){void};)myClassMethod''~
''{''~
&color(#007900){/// your code};~
''}''~
''-(&color(#CB0094){id};)myMethod''~
''{''~
''&color(#CB0094){return}; obj;''~
''}''~
&color(#CB0094){@end};
ヘッダにおける括弧の使い方に注目。括弧内はインスタンス変...
クラスメソッドは+、インスタンスメソッドは-で書き始める規...
メソッドは、&color(#CB0094){@interface}; ~ &color(#CB0094...
MyObject のインスタンスを保持した変数 receiver が存在した...
>[&color(#277075){MyObject}; &color(#13484C){myClassMetho...
[receiver &color(#13484C){myMethod};];
と書く。Objective-C においてはインスタンスをレシーバと呼...
「レシーバにメッセージを送る」と言えば、インスタンスメソ...
***引数 [#args]
id 型の変数 value を -myMethod に渡す場合、
>[receiver &color(#13484C){myMethod};:value];
と書く。メソッド名の後に :(コロン)を打って引数を書くと...
>&color(#007900){// MyObject.h};~
&color(#CB0094){@interface}; MyObject : NSObject{~
&color(#CB0094){id}; obj;~
}~
+(&color(#CB0094){void};)myClassMethod;~
-(&color(#CB0094){id};)myMethod'':(&color(#CB0094){id...
&color(#CB0094){@end};~
>&color(#007900){// MyObject.m};~
&color(#CB0094){@implementation}; MyObject~
+(&color(#CB0094){void};)myClassMethod~
{~
&color(#007900){/// your code};~
}~
-(&color(#CB0094){id};)myMethod'':(&color(#CB0094){id...
{~
&color(#CB0094){return}; obj;~
}~
&color(#CB0094){@end};
更に複数の引数を渡したいのならば、可変長かラベルを利用す...
註:Xcodeならインテリセンスが効くので、呼び出し時の変数の...
***可変長引数 [#variadic]
C における可変長と同じく、可変長引数を id 型とすれば
>+(&color(#CB0094){void};)myClassMethod:(&color(#CB00...
と書ける。
***ラベル(label) [#label]
Objective-C で最も一般的な複数引数の記述・利用法がラベル...
>[receiver &color(#13484C){myMethod};:val &color(#13484C)...
-(&color(#CB0094){id};)myMethod:(&color(#CB0094){id};...
と書く。C の関数等で myMethod(val,num1,num2); と書くと引...
Objective-C では上にある様に見た目に分かり易くなっている。
またこのラベルは同じメソッドで複数用意できる。
myMethod:withX:withY:withZ: なるメソッドを作りたいと思っ...
//***メソッドの上書き(override) [#override]
//<準備中>
***命名規約(メソッド) [#methodname]
Cocoa API を見て行くと以下のような暗默の了解がある。一貫...
NSString のメソッドを例にすると、
+ 初期化
+++ stringWithString:, + stringWithUTF8String:, e...
特別なファクトリメソッド(簡易コンストラクタと言う)。戻...
++- initWithString:, - initWithUTF8String:, etc.~
特別なイニシャライザ(指定イニシャライザと言う)。init で...
+- writeToFile:atomically:encoding:error:, - writ...
writeTo はデータを書き出すメソッド名である。データは NSDa...
+- isAbsolutePath~
真偽値を返す場合に is で書き始める。
+- UTF8String, - length, - propertyList, etc.~
Objective-C における getter は get を付けない。一方 sette...
+- getLineStart:end:contentsEnd:forRange:, - getC...
get は getter ではなく、C のポインタを渡してインスタンス...
**レシーバ(receiver)/インスタンス(instance) [#receiver]
Objective-C のインスタンスは C のポインタなので、変数の型...
>&color(#641D9E){NSObject}; *obj = [[&color(#641D9E){NSOb...
***レシーバの初期化 [#init]
レシーバの初期化は上にあげた +alloc, -init がもっとも基本...
alloc と init は NSObject で定義されており、Objective-C ...
alloc がレシーバにメモリを割り当て、init がこれを初期化す...
註:+new は、+alloc と -init を呼び出すのと同等。
***nil の扱い[#nilreceiver]
nil に存在しないメッセージを送信しても、余計なエラーが発...
>[&color(#CB0094){nil}; &color(#13484C){myMethod};];&colo...
[receiver &color(#13484C){myMethod2};]; &color(#007900){/...
**メモリ管理 [#gc]
Objective-C のメモリ管理は「参照カウント」と「ガベージコ...
+alloc はメモリを割り当てたオブジェクトを返す。malloc 同...
+init はオブジェクトを初期化する。Cocoa はこの二段構えに...
+retain はメモリ割り当てを解放しない為の手続きである。参...
+release はメモリ割り当てを解放する為の手続きである。参照...
一般に上から順に実行する。任意の瞬間にオブジェクトを解放...
註:-retainCount によりカウンタを取得できる。NSLog(@"%d",...
註:ガベージコレクションでは、nil を代入する事が、解放の...
註:iOS ではメモリが限られているためガベージコレクション...
***初期化とメモリ解放時の処理 [#allocation]
クラスの初期化には +load, +initialize を用いる。これはた...
インスタンスの初期化は -init 等の指定イニシャライザで行う。
メモリ解放時の処理は -dealloc, -finalize で行う。-dealloc...
ただし、必ず呼び出されると期待しない方がよく、アプリケー...
(例えば、NSApplication に -terminate とすると、OS が強制...
註:-dealloc は強制的にメモリを解放する手段ともなる。
***autorelease と NSAutoreleasePool [#rf888730]
上で示した仕組みでは時に問題が起こる。メソッドの戻り値と...
>-(&color(#CB0094){id};)myMethod~
{~
&color(#641D9E){NSObject}; *val = [[&co...
&color(#CB0094){return}; val;~
}~
このメソッドの戻り値を利用する場合、戻り値を取得した時点...
この場合、autorelease を呼び、Autorelease pool に追加する...
>-(&color(#CB0094){id};)myMethod~
{~
&color(#641D9E){NSObject}; *val = [[&co...
&color(#CB0094){return}; [val &color(#3...
}~
こうすると、Autorelease pool 上にあって且つカウンタが 1 ...
註:以上の事から、指定イニシャライザで取得したインスタン...
註:通常の開発では、NSApplication が NSAutoreleasePool の...
しかし Cocoa Application 以外の Cocoa を利用した開発では...
また、任意に -drain を呼んでやる必要がでてくる。この -dra...
>NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] ini...
/* code */~
[pool drain];~
***簡易コンストラクタ [#p4a641f9]
簡易コンストラクタは autorelease されたオブジェクトを返す。
***指定イニシャライザ [#v02cdf0c]
指定イニシャライザは、実態が唯一でなければならず、しかも ...
***戻り値の規約 [#n605ab08]
-+alloc, +allocWithZone:
--copy, -mutableCopy, +copyWithZone:, +mu...
これらで取得する場合は retain されているので、プログラマ...
**NSObject クラス [#g74b4db7]
Cocoa における Root class の一つ。
**プロトコル(protocol) [#z2525404]
Ruby における module みたいな奴。任意のクラスにいくらでも...
**カテゴリ(category) [#pd8556d6]
定義済のクラスを拡張できる、Objective-C でも一・二を争う...
**サブクラス(subclass) [#ta05093a]
**プロパティ(property) [#d8670d8d]
**よく使う構造体 [#id5b20c8]
以下の四つの構造体はよく使う。これらは KVC でも始めからサ...
+NSSize
--NSView 及びそのサブクラスでよく使うことになる。NSMakeSi...
+NSPoint
+NSRect
+NSRange
--配列なんかで用いる。NSMakeRange で生成できる。
*附録:Objective-C [#v8ad2bf8]
**ディレクティブ(directive) [#z984e5a5]
Objective-C におけるコンパイラ及びプリプロセッサへの命令...
***コンパイラのディレクティブ [#j3225b9a]
-#import
-//
#import は #include に同じだが、一度しか読み込まない点が...
***プリプロセッサのディレクティブ [#s52514b5]
クラス等は以下のように宣言する。
-@interface ~ @end
-@implementation ~ @end
-@protocol ~ @end
インスタンス変数の可視性は次の宣言で示す。
-@private
-@protected (初期設定)
-@public
例外処理は、
-@try
-@throw
-@catch()
-@finally
さらに以下が用意される。
-@class
-@selector(method_name)
-@protocol(protocol_name)
-@encode(type_spec)
-@"string"
-@"string1" @"string2" ... @"stringN"
-@synchronized()
一応説明が必要なのは @"string" であろう。@"string" は quo...
註:インスタンス変数の可視性は、コンパイラが警告を出す申...
どのみちカテゴリを用いればどんな変数であれ参照・変更が可...
註:Objective-C 2.0 から、@property, @synthesize, @option...
***実行環境のはなし:Architecture について(32-64bit/PPC...
***VMX(AltiVec) と SSE [#o2008692]
**C 言語との関連 [#q1055f75]
***const 及び static [#j0c52aa0]
@"string" でわかるように、const は使用可能。static は sin...
***インスタンス変数の扱い [#j3f1c269]
インスタンス変数は C での構造体のメンバの様に宣言運用でき...
**メソッドの静的呼び出し [#od53fcb9]
メソッドを呼び出す行為は、レシーバの情報から関数ポインタ...
id obj = [self getObject];
Method method;
Class class = [self class];
SEL name = @selector(myMethod:);
method = class_getInstanceMethod(class, name);
method_getImplementation(method)(self, name, obj);
とすれば、これは [self myMethod:obj]; と同等である。
なお、メソッドを上書きしていなければ、self とは別のインス...
*Cocoa [#w46bc7aa]
**Xcode(旧Project Builder) [#h871a571]
Mac OS X における標準的開発環境が Xcode とそのパッケージ...
**Xib (Nib) ファイルと Interface Builder [#vece2793]
Cocoa アプリケーションでは、GUI 部品(及び Controller Obj...
これらのファイルは、任意の瞬間に、任意の方法で読み込むこ...
読み込まれた Nib ファイルにおいては、保存されたオブジェク...
***NSMainNibFile [#b82ed230]
Project 中の info.plist の NSMainNibFile、或いは Xcode で...
***アウトレット(Outlet)とアクション(Action) [#l95742c6]
【重要な内容ですが、ココに纏めて書きます】Outlet はインス...
註:IBOutlet 及び IBAction は C のマクロである。IBOutlet ...
***コントローラオブジェクト(Controller object) [#tdf38a...
Interface Builder の Library に Object と呼ばれる部品があ...
例:
+Xcode で新規プロジェクトを選択し、適当な名前の Cocoa App...
+次に新規ファイルを選び、ヘッダを含めて AppController ク...
+AppController.h を編集し、AppController クラスへ -(IBAct...
+AppController.m の AppController クラスには -(IBAction)m...
+MainMenu.xib を開く(恐らくテンプレート通りならこのファ...
+Library の Buttons から、Gradient Button を選び、何もな...
+Library の Object & Controller から、Object を選び追加す...
+次に初期設定では NSObject の インスタンスであるから、Cla...
+Gradient Button の Sent Actions の selector に myMessage...
Interface Builder の使い方は言葉では表現しづらい。一応全...
参考:
-[[Cocoa Fundamentals Guide:http://developer.apple.com/jp...
-[[Cocoaアプリケーションチュートリアル:http://developer.a...
基本的なことが書いてある。『Cocoa Fundamentals Guide > オ...
註:Cocoa Fundamentals Guide にもあるが、コードでアクショ...
// AppController.h
@interface AppController : NSObject
{
IBOutlet NSButton *button;
// AppController.m
-(void)awakeFromNib{
[button setTarget:self];
[button setAction:@selector(myMessage:)];
}
と書き加え、定義した outlet が機能するようにボタンへ接続...
GUI 部品のインスタンスをコントローラ上で取得できるように...
課題:『参考』『註』を見ながら、ウィンドウに先程のボタン...
***File's Owner [#mb20f88d]
Nib ファイルにはその所有者である File's Owner が必ず設定...
-NSMainNibFile においては NSApplication。
-Document-based Application の Document 用 Nib ファイルで...
-Window 用 Nib ファイルでは、NSBundle の +loadNibNamed:ow...
-Custom View 用 Nib ファイルでは、適当な Object、或いは N...
等である。
***First Responder [#sace8878]
標準でかなり多くのアクションが Main menu から設定されてい...
**バインディング(Binding) [#d75a1c73]
10.3 あたりから導入された憶えがある。面倒なので解説丸投げ。
-[[Cocoa Binding : バインディングって何なのさ:http://site...
**通知(Notification) [#w12f5991]
**Foundation Framework [#i8aa10b0]
文字通り基礎的な API。主要なデータ型のクラスが定義されて...
**AppKit Framework [#kab41712]
Application Kit (AppKit) には、さまざまな御約束がある。あ...
**CoreData Framework [#pc166909]
**二三の重要なプロトコル [#v3043586]
***NSObject Protocol [#o8819deb]
-[[NSObject Protocol Reference:http://developer.apple.com...
***NSKeyValueCoding Protocol と NSKeyValueObserving Proto...
Protocol と呼ばれてはいるが、どちらかというと、文法として...
-[[NSKeyValueCoding Protocol Reference:http://developer.a...
-[[NSKeyValueObserving Protocol:http://developer.apple.co...
***NSFastEnumeration Protocol [#b8b87c43]
10.5 以降で追加。高速列挙できる。コンパイル時に Obj-C か...
-[[NSFastEnumeration Protocol Reference:http://developer....
***NSCoding Protocol [#o16d5326]
NSDocument Class を使ったアプリケーションで書類を保存する...
-[[NSCoding Protocol Reference:http://developer.apple.com...
***NSCopying Protocol と NSMutableCopying Protocol [#h1b3...
インスタンスをコピーするための手続き。shallow か deep か...
-[[NSCopying Protocol:http://developer.apple.com/library/...
-[[NSMutableCopying Protocol:http://developer.apple.com/l...
**ローカライズ(Localization) [#k00f48e1]
Mac OS X の Install DVD は世界共通であると云うと、些かの...
長くなるので丸投げ。その内、NSBundle Class の仕組みと str...
-[[Internationalization and Localization:http://developer...
**ユーザ設定 [#n90a78bb]
NSUserDefaults Class では、~/Library/Preference に設定フ...
終了行:
*Objective-C [#m05c3047]
完全なC互換。CocoaはObjective-CのAPI。~
Cocoaについて学べば必然的にObjective-Cについて学べます。~
主な開発環境はXcode(または旧Project Builder)。
#contents
一般的な Object 指向の思想を理解している前提の元に文法事...
**予め定義された型と変数 [#predefined]
Objective-C では新たに次の様な型が定義されている(objc-cl...
-id(任意のレシーバを表す型)
-SEL
-IMP
-Method
-Class
-BOOL
言語構造上の変数は
-nil
-self
-super
-YES
-NO
など。
**クラス(class) [#class]
定義は.hファイル、実装は.mファイルに書く。Xcode だと自然...
>&color(#007900){// MyObject.h};~
''&color(#CB0094){@interface}; MyObject : NSObject{''~
''}''~
''&color(#CB0094){@end};''~
>&color(#007900){// MyObject.m};~
''&color(#CB0094){@implementation}; MyObject''~
''&color(#CB0094){@end};''
Objective-C では C との区別のため、拡張した文法は@を付け...
新たなクラスを定義する場合は一般に NSObject を継承して定...
*** 命名規約(クラス) [#classname]
クラスは大文字で始める。自身のクラスに接頭辞を付ける際、
NS(NeXTSTEP)や IO(Input-Output)や OS(Operating Syste...
**メッセージ(message)/メソッド(method) [#method]
先程のクラスに、インスタンス変数 obj、クラスメソッド myCl...
>&color(#007900){// MyObject.h};~
&color(#CB0094){@interface}; MyObject : NSObject{~
''&color(#CB0094){id}; obj;''~
}~
''+(&color(#CB0094){void};)myClassMethod;''~
''-(&color(#CB0094){id};)myMethod;''~
&color(#CB0094){@end};~
>&color(#007900){// MyObject.m};~
&color(#CB0094){@implementation}; MyObject~
''+(&color(#CB0094){void};)myClassMethod''~
''{''~
&color(#007900){/// your code};~
''}''~
''-(&color(#CB0094){id};)myMethod''~
''{''~
''&color(#CB0094){return}; obj;''~
''}''~
&color(#CB0094){@end};
ヘッダにおける括弧の使い方に注目。括弧内はインスタンス変...
クラスメソッドは+、インスタンスメソッドは-で書き始める規...
メソッドは、&color(#CB0094){@interface}; ~ &color(#CB0094...
MyObject のインスタンスを保持した変数 receiver が存在した...
>[&color(#277075){MyObject}; &color(#13484C){myClassMetho...
[receiver &color(#13484C){myMethod};];
と書く。Objective-C においてはインスタンスをレシーバと呼...
「レシーバにメッセージを送る」と言えば、インスタンスメソ...
***引数 [#args]
id 型の変数 value を -myMethod に渡す場合、
>[receiver &color(#13484C){myMethod};:value];
と書く。メソッド名の後に :(コロン)を打って引数を書くと...
>&color(#007900){// MyObject.h};~
&color(#CB0094){@interface}; MyObject : NSObject{~
&color(#CB0094){id}; obj;~
}~
+(&color(#CB0094){void};)myClassMethod;~
-(&color(#CB0094){id};)myMethod'':(&color(#CB0094){id...
&color(#CB0094){@end};~
>&color(#007900){// MyObject.m};~
&color(#CB0094){@implementation}; MyObject~
+(&color(#CB0094){void};)myClassMethod~
{~
&color(#007900){/// your code};~
}~
-(&color(#CB0094){id};)myMethod'':(&color(#CB0094){id...
{~
&color(#CB0094){return}; obj;~
}~
&color(#CB0094){@end};
更に複数の引数を渡したいのならば、可変長かラベルを利用す...
註:Xcodeならインテリセンスが効くので、呼び出し時の変数の...
***可変長引数 [#variadic]
C における可変長と同じく、可変長引数を id 型とすれば
>+(&color(#CB0094){void};)myClassMethod:(&color(#CB00...
と書ける。
***ラベル(label) [#label]
Objective-C で最も一般的な複数引数の記述・利用法がラベル...
>[receiver &color(#13484C){myMethod};:val &color(#13484C)...
-(&color(#CB0094){id};)myMethod:(&color(#CB0094){id};...
と書く。C の関数等で myMethod(val,num1,num2); と書くと引...
Objective-C では上にある様に見た目に分かり易くなっている。
またこのラベルは同じメソッドで複数用意できる。
myMethod:withX:withY:withZ: なるメソッドを作りたいと思っ...
//***メソッドの上書き(override) [#override]
//<準備中>
***命名規約(メソッド) [#methodname]
Cocoa API を見て行くと以下のような暗默の了解がある。一貫...
NSString のメソッドを例にすると、
+ 初期化
+++ stringWithString:, + stringWithUTF8String:, e...
特別なファクトリメソッド(簡易コンストラクタと言う)。戻...
++- initWithString:, - initWithUTF8String:, etc.~
特別なイニシャライザ(指定イニシャライザと言う)。init で...
+- writeToFile:atomically:encoding:error:, - writ...
writeTo はデータを書き出すメソッド名である。データは NSDa...
+- isAbsolutePath~
真偽値を返す場合に is で書き始める。
+- UTF8String, - length, - propertyList, etc.~
Objective-C における getter は get を付けない。一方 sette...
+- getLineStart:end:contentsEnd:forRange:, - getC...
get は getter ではなく、C のポインタを渡してインスタンス...
**レシーバ(receiver)/インスタンス(instance) [#receiver]
Objective-C のインスタンスは C のポインタなので、変数の型...
>&color(#641D9E){NSObject}; *obj = [[&color(#641D9E){NSOb...
***レシーバの初期化 [#init]
レシーバの初期化は上にあげた +alloc, -init がもっとも基本...
alloc と init は NSObject で定義されており、Objective-C ...
alloc がレシーバにメモリを割り当て、init がこれを初期化す...
註:+new は、+alloc と -init を呼び出すのと同等。
***nil の扱い[#nilreceiver]
nil に存在しないメッセージを送信しても、余計なエラーが発...
>[&color(#CB0094){nil}; &color(#13484C){myMethod};];&colo...
[receiver &color(#13484C){myMethod2};]; &color(#007900){/...
**メモリ管理 [#gc]
Objective-C のメモリ管理は「参照カウント」と「ガベージコ...
+alloc はメモリを割り当てたオブジェクトを返す。malloc 同...
+init はオブジェクトを初期化する。Cocoa はこの二段構えに...
+retain はメモリ割り当てを解放しない為の手続きである。参...
+release はメモリ割り当てを解放する為の手続きである。参照...
一般に上から順に実行する。任意の瞬間にオブジェクトを解放...
註:-retainCount によりカウンタを取得できる。NSLog(@"%d",...
註:ガベージコレクションでは、nil を代入する事が、解放の...
註:iOS ではメモリが限られているためガベージコレクション...
***初期化とメモリ解放時の処理 [#allocation]
クラスの初期化には +load, +initialize を用いる。これはた...
インスタンスの初期化は -init 等の指定イニシャライザで行う。
メモリ解放時の処理は -dealloc, -finalize で行う。-dealloc...
ただし、必ず呼び出されると期待しない方がよく、アプリケー...
(例えば、NSApplication に -terminate とすると、OS が強制...
註:-dealloc は強制的にメモリを解放する手段ともなる。
***autorelease と NSAutoreleasePool [#rf888730]
上で示した仕組みでは時に問題が起こる。メソッドの戻り値と...
>-(&color(#CB0094){id};)myMethod~
{~
&color(#641D9E){NSObject}; *val = [[&co...
&color(#CB0094){return}; val;~
}~
このメソッドの戻り値を利用する場合、戻り値を取得した時点...
この場合、autorelease を呼び、Autorelease pool に追加する...
>-(&color(#CB0094){id};)myMethod~
{~
&color(#641D9E){NSObject}; *val = [[&co...
&color(#CB0094){return}; [val &color(#3...
}~
こうすると、Autorelease pool 上にあって且つカウンタが 1 ...
註:以上の事から、指定イニシャライザで取得したインスタン...
註:通常の開発では、NSApplication が NSAutoreleasePool の...
しかし Cocoa Application 以外の Cocoa を利用した開発では...
また、任意に -drain を呼んでやる必要がでてくる。この -dra...
>NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] ini...
/* code */~
[pool drain];~
***簡易コンストラクタ [#p4a641f9]
簡易コンストラクタは autorelease されたオブジェクトを返す。
***指定イニシャライザ [#v02cdf0c]
指定イニシャライザは、実態が唯一でなければならず、しかも ...
***戻り値の規約 [#n605ab08]
-+alloc, +allocWithZone:
--copy, -mutableCopy, +copyWithZone:, +mu...
これらで取得する場合は retain されているので、プログラマ...
**NSObject クラス [#g74b4db7]
Cocoa における Root class の一つ。
**プロトコル(protocol) [#z2525404]
Ruby における module みたいな奴。任意のクラスにいくらでも...
**カテゴリ(category) [#pd8556d6]
定義済のクラスを拡張できる、Objective-C でも一・二を争う...
**サブクラス(subclass) [#ta05093a]
**プロパティ(property) [#d8670d8d]
**よく使う構造体 [#id5b20c8]
以下の四つの構造体はよく使う。これらは KVC でも始めからサ...
+NSSize
--NSView 及びそのサブクラスでよく使うことになる。NSMakeSi...
+NSPoint
+NSRect
+NSRange
--配列なんかで用いる。NSMakeRange で生成できる。
*附録:Objective-C [#v8ad2bf8]
**ディレクティブ(directive) [#z984e5a5]
Objective-C におけるコンパイラ及びプリプロセッサへの命令...
***コンパイラのディレクティブ [#j3225b9a]
-#import
-//
#import は #include に同じだが、一度しか読み込まない点が...
***プリプロセッサのディレクティブ [#s52514b5]
クラス等は以下のように宣言する。
-@interface ~ @end
-@implementation ~ @end
-@protocol ~ @end
インスタンス変数の可視性は次の宣言で示す。
-@private
-@protected (初期設定)
-@public
例外処理は、
-@try
-@throw
-@catch()
-@finally
さらに以下が用意される。
-@class
-@selector(method_name)
-@protocol(protocol_name)
-@encode(type_spec)
-@"string"
-@"string1" @"string2" ... @"stringN"
-@synchronized()
一応説明が必要なのは @"string" であろう。@"string" は quo...
註:インスタンス変数の可視性は、コンパイラが警告を出す申...
どのみちカテゴリを用いればどんな変数であれ参照・変更が可...
註:Objective-C 2.0 から、@property, @synthesize, @option...
***実行環境のはなし:Architecture について(32-64bit/PPC...
***VMX(AltiVec) と SSE [#o2008692]
**C 言語との関連 [#q1055f75]
***const 及び static [#j0c52aa0]
@"string" でわかるように、const は使用可能。static は sin...
***インスタンス変数の扱い [#j3f1c269]
インスタンス変数は C での構造体のメンバの様に宣言運用でき...
**メソッドの静的呼び出し [#od53fcb9]
メソッドを呼び出す行為は、レシーバの情報から関数ポインタ...
id obj = [self getObject];
Method method;
Class class = [self class];
SEL name = @selector(myMethod:);
method = class_getInstanceMethod(class, name);
method_getImplementation(method)(self, name, obj);
とすれば、これは [self myMethod:obj]; と同等である。
なお、メソッドを上書きしていなければ、self とは別のインス...
*Cocoa [#w46bc7aa]
**Xcode(旧Project Builder) [#h871a571]
Mac OS X における標準的開発環境が Xcode とそのパッケージ...
**Xib (Nib) ファイルと Interface Builder [#vece2793]
Cocoa アプリケーションでは、GUI 部品(及び Controller Obj...
これらのファイルは、任意の瞬間に、任意の方法で読み込むこ...
読み込まれた Nib ファイルにおいては、保存されたオブジェク...
***NSMainNibFile [#b82ed230]
Project 中の info.plist の NSMainNibFile、或いは Xcode で...
***アウトレット(Outlet)とアクション(Action) [#l95742c6]
【重要な内容ですが、ココに纏めて書きます】Outlet はインス...
註:IBOutlet 及び IBAction は C のマクロである。IBOutlet ...
***コントローラオブジェクト(Controller object) [#tdf38a...
Interface Builder の Library に Object と呼ばれる部品があ...
例:
+Xcode で新規プロジェクトを選択し、適当な名前の Cocoa App...
+次に新規ファイルを選び、ヘッダを含めて AppController ク...
+AppController.h を編集し、AppController クラスへ -(IBAct...
+AppController.m の AppController クラスには -(IBAction)m...
+MainMenu.xib を開く(恐らくテンプレート通りならこのファ...
+Library の Buttons から、Gradient Button を選び、何もな...
+Library の Object & Controller から、Object を選び追加す...
+次に初期設定では NSObject の インスタンスであるから、Cla...
+Gradient Button の Sent Actions の selector に myMessage...
Interface Builder の使い方は言葉では表現しづらい。一応全...
参考:
-[[Cocoa Fundamentals Guide:http://developer.apple.com/jp...
-[[Cocoaアプリケーションチュートリアル:http://developer.a...
基本的なことが書いてある。『Cocoa Fundamentals Guide > オ...
註:Cocoa Fundamentals Guide にもあるが、コードでアクショ...
// AppController.h
@interface AppController : NSObject
{
IBOutlet NSButton *button;
// AppController.m
-(void)awakeFromNib{
[button setTarget:self];
[button setAction:@selector(myMessage:)];
}
と書き加え、定義した outlet が機能するようにボタンへ接続...
GUI 部品のインスタンスをコントローラ上で取得できるように...
課題:『参考』『註』を見ながら、ウィンドウに先程のボタン...
***File's Owner [#mb20f88d]
Nib ファイルにはその所有者である File's Owner が必ず設定...
-NSMainNibFile においては NSApplication。
-Document-based Application の Document 用 Nib ファイルで...
-Window 用 Nib ファイルでは、NSBundle の +loadNibNamed:ow...
-Custom View 用 Nib ファイルでは、適当な Object、或いは N...
等である。
***First Responder [#sace8878]
標準でかなり多くのアクションが Main menu から設定されてい...
**バインディング(Binding) [#d75a1c73]
10.3 あたりから導入された憶えがある。面倒なので解説丸投げ。
-[[Cocoa Binding : バインディングって何なのさ:http://site...
**通知(Notification) [#w12f5991]
**Foundation Framework [#i8aa10b0]
文字通り基礎的な API。主要なデータ型のクラスが定義されて...
**AppKit Framework [#kab41712]
Application Kit (AppKit) には、さまざまな御約束がある。あ...
**CoreData Framework [#pc166909]
**二三の重要なプロトコル [#v3043586]
***NSObject Protocol [#o8819deb]
-[[NSObject Protocol Reference:http://developer.apple.com...
***NSKeyValueCoding Protocol と NSKeyValueObserving Proto...
Protocol と呼ばれてはいるが、どちらかというと、文法として...
-[[NSKeyValueCoding Protocol Reference:http://developer.a...
-[[NSKeyValueObserving Protocol:http://developer.apple.co...
***NSFastEnumeration Protocol [#b8b87c43]
10.5 以降で追加。高速列挙できる。コンパイル時に Obj-C か...
-[[NSFastEnumeration Protocol Reference:http://developer....
***NSCoding Protocol [#o16d5326]
NSDocument Class を使ったアプリケーションで書類を保存する...
-[[NSCoding Protocol Reference:http://developer.apple.com...
***NSCopying Protocol と NSMutableCopying Protocol [#h1b3...
インスタンスをコピーするための手続き。shallow か deep か...
-[[NSCopying Protocol:http://developer.apple.com/library/...
-[[NSMutableCopying Protocol:http://developer.apple.com/l...
**ローカライズ(Localization) [#k00f48e1]
Mac OS X の Install DVD は世界共通であると云うと、些かの...
長くなるので丸投げ。その内、NSBundle Class の仕組みと str...
-[[Internationalization and Localization:http://developer...
**ユーザ設定 [#n90a78bb]
NSUserDefaults Class では、~/Library/Preference に設定フ...
ページ名: