2008-08-23 午後から雨、夏ひとやすみ涼しい日 [長年日記]
_ Objective-C2.0本読書会-3
参加してきました。
前回とはうってかわってiPhone開発してる人が多数派。
懇親会はiPhoneの話もたくさん聞けて、
読書会も懇親会もめちゃめちゃ勉強になりました。
以下、私的メモです。
最後にプロジェクタに映してみんなで復習する機会をもらいまして、
間違いを指摘してもらえるというラッキーイベントも。
それでもまだ素人なので間違いに気づいた方はご指摘頂けるとうれしいです。
---
■4章p.78〜
・Nilはnilと違う。Nilはクラスオブジェクト専用。でもほとんど使わんね。
・クラスオブジェクトはいつできるの?
→普通にコードを書くならプログラム起動時に全部あると思っていい。
ダイナミックにロードするのは違うんじゃないかな。
・self:自分のクラスのクラスオブジェクト
・super:親クラスのクラスオブジェクト
・static指定子
・・static以外:大域的にアクセス可能
・・static指定子:実装ファイル内だけで参照可能
・クラスオブジェクトの初期化(プログラム開始時に既に存在してるんだけどどうする?)
→NSObjectのinitializeで行う
・initializeメソッドは複数回呼んでも大丈夫にすべき
→子孫クラスでinitializeが実装されてない場合は複数回呼ばれるので
・イニシャライザの返す型はid型にしておくこと(インスタンスオブジェクトの話)
・Classはクラスオブジェクトの型。
Class hoge;
・classはレシーバクラスオブジェクトのインスタンスオブジェクトを得るメソッド(ややこしい・・・)
[instanceObj class];
■5章
・メモリ管理方式は2種類
・・カウンタ管理方式(MacOSX全般,iPhone)
・・ガベージコレクション(10.5〜)
・deallocはコードから呼んじゃダメ
→retain,releaseつかってね
・releaseは参照カウンタを1減らすだけ
・オブジェクト終了処理はdeallocに実装する
・・deallocの最後に[super dealloc];を呼ばないとダメ(自動で呼ばれない)
・ObjCオブジェクトはローカル変数のようにhogeclass hoge; とは書けない。alloc使え。
・autorelease
id pool = [[NSApplicationPool alloc]init];←自動解放プールオブジェクトを生成
ここでアハハウフフする
[pool release]; ←ここで解放される
・自動解放プールは複数生成できる。直近のものが使われる。
・自動解放プールにはautorelease呼んじゃダメ
・自動解放プールはGUIアプリだとイベントループで自動に作ってくれるので自分で作らなくていい。
→でも、CUIアプリだとないので注意。自作してね。
・メソッド内でautoreleaseして返す→受けた側でretainという技。オーナーが移動する。
・setterでの注意
・・ダメな例(myValueオブジェクトとobjオブジェクトが同じだとdeallocされちゃう)
- (void) setter:(id) obj
{
[myValue release];
myValue = [obj retain];
}
→良い例
- (void) setter:(id) obj
{
[obj retain];
[myValue release];
myValue = obj;
}
・autoreleaseされて返されるinitializeがあるよ
・・-(id)initWithUTF8String:(...)
・・+(id)stringWithUTF8String(...) ←autoreleaseプールに入ってオブジェクトをもらえる
↑コンビニエンスコンストラクタといいます
・解放されたオブジェクトにメッセージを送った場合の動作は不定
・ADC 2124 メモリ情報をコンソールに出したりとかいうテクニックが紹介されている
http://developer.apple.com/technotes/tn2004/tn2124.html
--- 広告 ---
www.date2.jp
デートスポットの口コミサイト
------
広告www
>suginoyさん<br>会場でもここでウケをとれたのでしてやったりです。ニヤリ。<br>でも日記読んでる人にはなんでそんなとこに<br>広告が挿入されるのか謎ですよね。(^^;)