<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>memo.393 &#187; iPhone</title>
	<atom:link href="http://memo.393.bz/cate/iphone/feed" rel="self" type="application/rss+xml" />
	<link>http://memo.393.bz</link>
	<description>個人的メモです。間違いなどありましたらご指摘ください。。。</description>
	<lastBuildDate>Sun, 05 Sep 2010 03:02:06 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>[iPhone]InterFaceBuilderに設定してあるオブジェクトの初期化にはinitWithCoderもしくは、awakeFromNib</title>
		<link>http://memo.393.bz/archives/1317</link>
		<comments>http://memo.393.bz/archives/1317#comments</comments>
		<pubDate>Sun, 05 Sep 2010 02:50:33 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://memo.393.bz/?p=1317</guid>
		<description><![CDATA[(IBを使って)nibファイルにオブジェクトを引き充てた場合、nibからオブジェクトインスタンスが読み込まれる時、initもinitWithFrameも呼び出されない。
初期化処理的なコードを記載したいときは、initW [...]]]></description>
			<content:encoded><![CDATA[<p>(IBを使って)nibファイルにオブジェクトを引き充てた場合、nibからオブジェクトインスタンスが読み込まれる時、initもinitWithFrameも呼び出されない。<br />
初期化処理的なコードを記載したいときは、initWithCoderを使う。<br />
とのこと。</p>
<p>もうひとつnibから読み込まれたときに実行されるメソッドでawakeFromNibというメソッドがある。<br />
nibファイルを読み込んでメモリ上にインスタンスが復元された後に呼びだされる、とのこと。<br />
(initWithCoderはそうじゃないないのか？？)<br />
こちらはIBのGUIで設定したパラメータを取得したときに使う。<br />
らしい。</p>
<p>イマイチ使い分けがわからんのだけど、定義は</p>
<pre name="code" class="c">

-(void) awakeFromNib;
-(id)initWithCoder:(NSCoder*)coder;
</pre>
<p>なので、initWithCoderは引数があって、戻り値を返すような仕様。<br />
(selfを戻すらしい)<br />
根本的にどういうものなのかはまだよくわからん。。</p>
<p>ちなみに実行される順番としては、<br />
initWithCoder→awakeFromNib<br />
って感じでこれは予想通り。</p>
]]></content:encoded>
			<wfw:commentRss>http://memo.393.bz/archives/1317/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[iPhone]Objective- Cの勉強メモ:xibファイルとはどういうものなのか</title>
		<link>http://memo.393.bz/archives/1205</link>
		<comments>http://memo.393.bz/archives/1205#comments</comments>
		<pubDate>Mon, 21 Jun 2010 01:14:36 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Objective-C]]></category>

		<guid isPermaLink="false">http://memo.393.bz/?p=1205</guid>
		<description><![CDATA[・xibファイルとは、
XML Interface Builderの略。
その名の通り、xml形式のファイル。
これをxcodeから開くとInterfaceBuilder(アプリケーション：以下IB)が立ち上がってビジュ [...]]]></description>
			<content:encoded><![CDATA[<p><strong>・xibファイルとは、</strong><br />
XML Interface Builderの略。<br />
その名の通り、xml形式のファイル。<br />
これをxcodeから開くとInterfaceBuilder(アプリケーション：以下IB)が立ち上がってビジュアル的にxmlの中身を編集できる。<br />
(ということだと思う)</p>
<p><strong>・Flashでいったらxibファイルって何にあたるの？</strong><br />
とTwitterでつぶやいたら、<br />
エライ人から「FLEXでいうところのMXMLみたいなもの」と教えてもらった。<br />
なるほど、FLEXでもMXMLも表示オブジェクトの配置情報を持っているし、MXMLを使わなくてもASで表示オブジェクトの配置することもできる。<br />
（でもMXMLも使い方をよくわかってない)</p>
<p>ちょっと調べてみようと思ったらかなり分かりやすい素敵記事発見。</p>
<p><a href="http://shibuym.blogspot.com/2009/09/iphonexibnib1.html" target="_brank">iPhone:Xib/Nib ファイル(その1)：「支出管理」サポート </a><br />
<a href="http://shibuym.blogspot.com/2009/09/iphonexibnib2-nib.html" target="_brank">iPhone:Xib/Nib ファイル(その2) ：「支出管理」サポート </a></p>
<p>xibファイルは、UIApplicationかUIViewControllerのサブクラスによってロードされるものなのね。<br />
どのクラスにも設定できちゃうから、この辺りの仕組みがよくわからなかった。<br />
ありがたやありがたや。</p>
]]></content:encoded>
			<wfw:commentRss>http://memo.393.bz/archives/1205/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[iPhone] Objective- Cの勉強メモ:Xcodeショートカット：ヘッダーファイルとソースファイルの切り替え</title>
		<link>http://memo.393.bz/archives/1201</link>
		<comments>http://memo.393.bz/archives/1201#comments</comments>
		<pubDate>Sun, 13 Jun 2010 03:00:02 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Objective-C]]></category>

		<guid isPermaLink="false">http://memo.393.bz/?p=1201</guid>
		<description><![CDATA[.h/.mファイルの切り替え
cmd + option + 上キー（交互に切り替わる)
]]></description>
			<content:encoded><![CDATA[<p>.h/.mファイルの切り替え<br />
cmd + option + 上キー（交互に切り替わる)</p>
]]></content:encoded>
			<wfw:commentRss>http://memo.393.bz/archives/1201/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[iPhone] Objective- Cの勉強メモ：NSNotificationCenterでイベント通知の管理</title>
		<link>http://memo.393.bz/archives/1187</link>
		<comments>http://memo.393.bz/archives/1187#comments</comments>
		<pubDate>Wed, 09 Jun 2010 14:10:20 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Objective-C]]></category>

		<guid isPermaLink="false">http://memo.393.bz/?p=1187</guid>
		<description><![CDATA[Objective-CはASと違ってデリゲートとという機能がある。
デリゲートとは別に色んなクラスが通知するイベントを一括で管理してくれるクラスがあるみたい。
それが、NSNotificationCenterクラス。
手 [...]]]></description>
			<content:encoded><![CDATA[<p>Objective-CはASと違って<a href="http://memo.393.bz/archives/1122">デリゲート</a>とという機能がある。<br />
デリゲートとは別に色んなクラスが通知するイベントを一括で管理してくれるクラスがあるみたい。<br />
それが、NSNotificationCenterクラス。</p>
<p>手順としては、<br />
1.NSNotificationCenterのインスタンスを生成<br />
2.通知の登録(インスタンスに通知先、リスナー関数、通知の種類、通知の送信元)<br />
3.通知の開始<br />
4.(通知の終了)<br />
5:(通知の登録解除)</p>
<p>例)</p>
<pre name="code" class="c">

//playerはMPMusicPlayerControllerのインスタンス

//通知センタのインスタンを取得
NSNotificationCenter* noteCenter = [NSNotificationCenter defaultCenter];
//addObserver:通知先
//selector:リスナー関数
//name:通知してほしい通知の種類？
//object:通知の送信元
[noteCenter
addObserver:self
selector:@selector(hoge:)
name:MPMusicPlayerControllerNowPlayingItemDidChangeNotification
object:player];
//通知開始を指示
[player beginGeneratingPlaybackNotifications];
</pre>
<p>nameはnilにすると全ての種類のイベントが取得対象になる。<br />
(そもそも通知の送信元がどのようなイベントを発信してるかを把握してる必要あり？)<br />
(ドキュメントみれば書いてあるのかな？）<br />
objectはnilにすると、全ての送信元からイベントを受け取る。</p>
<p>あとNSNotificationCenterはシングルトンになるので、インスタンス変数の保持はしなくてもいいみたい。</p>
]]></content:encoded>
			<wfw:commentRss>http://memo.393.bz/archives/1187/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[iPhone] Objective- Cの勉強メモ：カテゴリという概念を使って元クラスの拡張(メソッドの追加)できる</title>
		<link>http://memo.393.bz/archives/1182</link>
		<comments>http://memo.393.bz/archives/1182#comments</comments>
		<pubDate>Wed, 09 Jun 2010 13:41:16 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Objective-C]]></category>

		<guid isPermaLink="false">http://memo.393.bz/?p=1182</guid>
		<description><![CDATA[Objective-CにはASにはない機能でカテゴリという概念がある。
これはクラスファイルにメソッドを追加することができる機能。
通常クラスを拡張するにはそのクラスを継承したサブクラスを定義すればいいと思う。
でも根本 [...]]]></description>
			<content:encoded><![CDATA[<p>Objective-CにはASにはない機能でカテゴリという概念がある。<br />
これはクラスファイルにメソッドを追加することができる機能。</p>
<p>通常クラスを拡張するにはそのクラスを継承したサブクラスを定義すればいいと思う。<br />
でも根本的に弄りたくなった場合、元のクラスを書き換えちゃうということもできる。<br />
(ASだと、Flash8でAS2のときは直接編集できたけど、AS3ではSWCになってるから無理ぽ）<br />
でも書き換えちゃうと何か不具合がおきたときとかバックアップとってないと元に戻すのが大変。</p>
<p>というわけでカテゴリという概念は、元クラスを簡易的に拡張できるという概念。<br />
ただし追加できるのはメソッドだけ。<br />
変数は追加できない。<br />
手順は拡張用のクラス（？）ファイルを作ってそこで定義する。</p>
<p>例）UIViewを拡張する、UIViewExファイルを生成する場合<br />
//ヘッダーファイル</p>
<pre name="code" class="c">

#import &lt;UIKit/UIKit.h&gt;
//ここでの()の中の名前は任意(ファイル名と同じでなくてよい)
@interface UIView (AnimationExtension)
//メソッドの定義
//ここに追加したいメソッドを書く
-(void) hoge;
@end
</pre>
<p>//実行ファイル</p>
<pre name="code" class="c">

#import &quot;UIViewExtention.h&quot;
@implementation UIView(AnimationExtension)
//メソッドの実装
    //ここで定義したメソッドを実装する
 -(void) hoge{
    //処理
}
@end
</pre>
<p>書き方で注意するのは、ヘッダーファイルでのinterfaceのくだり。<br />
変数は定義できないので、｛｝は書く必要なし。</p>
<p>これを反映されるには、反映させたいクラスファイルにて</p>
<pre name="code" class="c">

#import &quot;UIViewExtention.h&quot;
</pre>
<p>を記述すればよい。<br />
これが記述されたクラス内では、UIViewインスタンスにUIViewExで追加したメソッドが普通に使えるようになる。</p>
<p>//例</p>
<pre name="code" class="c">

-(void) init{
//imageViewはUIImageVIewクラスのインスタンス
//(UIImageViewのスーパークラスはUIImageなのでhogeメソッドが使える)
[imageView hoge];
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://memo.393.bz/archives/1182/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[iPhone]Objective- Cの勉強メモ：乱数の取り扱い</title>
		<link>http://memo.393.bz/archives/1170</link>
		<comments>http://memo.393.bz/archives/1170#comments</comments>
		<pubDate>Thu, 03 Jun 2010 17:27:19 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Objective-C]]></category>

		<guid isPermaLink="false">http://memo.393.bz/?p=1170</guid>
		<description><![CDATA[まずはObjective-CというかC言語での乱数の発生させる方法。
使える関数は2種類
まず
int rand(void);
という関数でint型の乱数を返すことができる。
このときに返る値は、0～馬鹿でかい数という感 [...]]]></description>
			<content:encoded><![CDATA[<p>まずはObjective-CというかC言語での乱数の発生させる方法。<br />
使える関数は2種類<br />
まず<br />
int rand(void);<br />
という関数でint型の乱数を返すことができる。<br />
このときに返る値は、0～馬鹿でかい数という感じ。<br />
馬鹿でかい数はコンパイラによって変わるらしい。<br />
(ASのMath.random()のように、0～1未満というわけでない)</p>
<pre name="code" class="c">

int i;
i = rand();
printf(%d,i);//0から馬鹿でかい数の間の間
</pre>
<p>ただ、このままだと乱数は実行するたびに常に同じ値を返すことになるので、初期化処理という行為が必要になる。<br />
そこで使うのがsrand();<br />
void srand(unsigned int 初期値);</p>
<p>使い方としては、rand()関数を実行する前にsrand()関数を実行することで初期化すればよし。<br />
初期値には、絶対にかぶらない値を日付データから取ればよし。</p>
<pre name="code" class="c">

//time(NULL)で現在の時刻が1970年1月1日午前0時0分0秒からの通算秒数で得られる。
srand(time(NULL));
rand();
</pre>
<p>以上が、C言語での設定方法</p>
<p>Objective-Cではsrandは以下のようにするらしい。</p>
<pre name="code" class="c">

//NSDateインスタンスを作って、本日の日付けを秒数に換算してる
srand([[NSDate date] timeIntervalSinceReferenceDate]);
rand()
</pre>
<p>※C言語のやり方でも問題なさげ。</p>
]]></content:encoded>
			<wfw:commentRss>http://memo.393.bz/archives/1170/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>[iPhone]Objective- Cの勉強メモ：プロパティ宣言：@propertyの意味</title>
		<link>http://memo.393.bz/archives/1149</link>
		<comments>http://memo.393.bz/archives/1149#comments</comments>
		<pubDate>Sat, 22 May 2010 00:41:40 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Objective-C]]></category>

		<guid isPermaLink="false">http://memo.393.bz/?p=1149</guid>
		<description><![CDATA[ヘッダーファイルにて、プロパティ宣言をすることでそのプロパティについてのゲッターセッターが実装される。
プロパティ宣言をしなくても、自分で実装処理を書いてもよい
プロパティの書式は、


//ヘッダーファイルに書く
// [...]]]></description>
			<content:encoded><![CDATA[<p>ヘッダーファイルにて、プロパティ宣言をすることでそのプロパティについてのゲッターセッターが実装される。<br />
プロパティ宣言をしなくても、自分で実装処理を書いてもよい</p>
<p>プロパティの書式は、</p>
<pre name="code" class="c">

//ヘッダーファイルに書く
//@property (属性 , 属性, ･･･)　データ型, 名前
//例
@property ( nonatomic, retain ) NSTimeZone* timeZone;

//ソースファイルに書く
@synthesize timeZone;
</pre>
<p>上の例を自分で実装した場合は</p>
<pre name="code" class="c">

//ソースファイルに書く
//ゲッター
-(NSTimeZone*) timeZone{
//同時実行不可のための処理：属性nonatomicに相当
@synchronized(self){
return timeZone;
}
}
//セッター：読み書きについて属性が未設定なのでセッターまで生成される
-(void) setTimeZone:(NSTimeZone *)zone{
//同時実行不可のための処理：属性nonatomicに相当
@synchronized(self){
if(timeZone != zone){
[timeZone release];
timeZone = [zone retain];//保持する際は保持カウントをアップさせる：属性retainに相当
}
}
}
</pre>
<p>※@synchronizedは排他制御するかしないか。<br />
マルチスレッドで同時に実行して欲しくない処理があるとき、これを指定することで片方のスレッドを停止することができる。<br />
上の例では排他制御に対応しており、プロパティの属性でnonatomicを指定すると、排他制御はしなくなる。</p>
]]></content:encoded>
			<wfw:commentRss>http://memo.393.bz/archives/1149/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[iPhone]Objective-Cの勉強メモ：dealloc</title>
		<link>http://memo.393.bz/archives/1143</link>
		<comments>http://memo.393.bz/archives/1143#comments</comments>
		<pubDate>Fri, 21 May 2010 12:33:26 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Objective-C]]></category>

		<guid isPermaLink="false">http://memo.393.bz/?p=1143</guid>
		<description><![CDATA[クラスファイルの最後の方にやたら登場するdeallocメソッド
NSObjectのメソッドで、それをオーバーライドしている。
dealloc実行のタイミングは保持カウントが0になったときに実行される。
保持カウントはイン [...]]]></description>
			<content:encoded><![CDATA[<p>クラスファイルの最後の方にやたら登場するdeallocメソッド<br />
NSObjectのメソッドで、それをオーバーライドしている。<br />
dealloc実行のタイミングは保持カウントが0になったときに実行される。</p>
<p>保持カウントはインスタンスの生成、retainさせた参照の追加でカウントアップ。<br />
releaseでカウントダウンされるのでカウント数には注意が必要。</p>
<p>例)</p>
<pre name="code" class="c">

- (void)dealloc {
    [window release];
//スーパークラス(NSObject)のdeallocを実行することで実際のメモリの破棄
//C言語のfree関数のようなもの
    [super dealloc];
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://memo.393.bz/archives/1143/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[iPhone]Objective-Cの勉強メモ(ActionScriptとの比較的な)：プロトコル</title>
		<link>http://memo.393.bz/archives/1137</link>
		<comments>http://memo.393.bz/archives/1137#comments</comments>
		<pubDate>Thu, 20 May 2010 15:52:34 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Objective-C]]></category>

		<guid isPermaLink="false">http://memo.393.bz/?p=1137</guid>
		<description><![CDATA[Objective-Cにはプロトコルという概念がある。
ActionScriptでいうところのInterfaceみたいなものらしい。
記述はヘッダーファイルでのクラスの定義のところに書く


@interface クラス [...]]]></description>
			<content:encoded><![CDATA[<p>Objective-Cにはプロトコルという概念がある。<br />
ActionScriptでいうところのInterfaceみたいなものらしい。<br />
記述はヘッダーファイルでのクラスの定義のところに書く</p>
<pre name="code" class="c">

@interface クラス名 : スーパークラス名 &lt;プロトコル名&gt;
//例
@interface ClockAppDelegate : NSObject &lt;UIApplicati&gt; {
</pre>
<p>プロトコルはデリゲートとも関わりがある。<br />
たとえば、あるAクラスのデリゲート対象とされたＢクラスはAクラスのプロトコルを記述しないとWarningになる。</p>
<pre name="code" class="c">

//例)
//UIWebViewクラスのインスタンス(ｗｅｂView)が現在のクラス(self)にデリゲートされてる
webView.delegate = self;
//このwebViewを持ったクラスはヘッダーファイルにUIWebViewDelegateプロトコルを追加しなくてはならない。
//例
@interface WebAppDelegate : NSObject &lt;UIApplicationDelegate,UIWebViewDelegate&gt; {}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://memo.393.bz/archives/1137/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[iP]Objective-Cの文法メモ（ActionScript3.0との比較的な)：インスタンスの作り方</title>
		<link>http://memo.393.bz/archives/1128</link>
		<comments>http://memo.393.bz/archives/1128#comments</comments>
		<pubDate>Wed, 19 May 2010 07:51:48 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Objective-C]]></category>

		<guid isPermaLink="false">http://memo.393.bz/archives/1128</guid>
		<description><![CDATA[クラスのインスタンスの生成方法
AS3はこんな感じ


//AS3
//newでコンストラクタを実行。
var hoge:MovieClip= new MovieClip();

obj-cはnewでなくて、各クラスによ [...]]]></description>
			<content:encoded><![CDATA[<p>クラスのインスタンスの生成方法<br />
AS3はこんな感じ</p>
<pre name="code" class="c">

//AS3
//newでコンストラクタを実行。
var hoge:MovieClip= new MovieClip();
</pre>
<p>obj-cはnewでなくて、各クラスによって色んな初期化メソッドが用意されているみたい。</p>
<pre name="code" class="c">

//Objective-C
//NSStringの場合

//直接文字列を入れて初期化
NSString* str = @&quot;HOGEHOGEO&quot;;
//NSString専用の初期化用のメソッドを使う
//文字列から生成
NSString* str = [NSString stringWithString: @&quot;HOGEHOGEO&quot;];
//既存の数値を利用して生成
NSString* str = [NSString stringWithFormat: @&quot;ほげ：%d&quot;,100];
</pre>
<p>※またどのクラスでも通用する汎用の初期化メソッドもある。<br />
(これがASのnewに近いのかな)<br />
[[クラス名 alloc] init]<br />
allocでメモリを確保して、initメソッドを実行<br />
(initメソッドはNSObjectのメソッド）<br />
あとallocでメモリ領域を確保した場合は使用後は自分で破棄しないとダメ<br />
(iPhoneはGC無いので)<br />
破棄は<br />
[インスタンス名 release];</p>
<pre name="code" class="c">

//Objective-C
//allocでインスタンス用のメモリを確保し、initを実行
NSString*  str = [[NSString alloc] init];
//※ただしNSStringのインスタンスは文字列の上書きができないので上記でインスタンスを作ると中身が空っぽのインスタンスができるだけとなる。
NSLog(@&quot;%@&quot;,str);//出力：（ブランク)
//破棄
[str release];
</pre>
<p>2010/05/21：追記<br />
objective-cでもnewを使ったインスタンスの生成はできる</p>
<pre name="code" class="as">

//newを使った例
NSDate* date = [NSDate new];
//newを使わない(上と同じ意味)
NSDate* date = [[NSDate alloc] init];
</pre>
]]></content:encoded>
			<wfw:commentRss>http://memo.393.bz/archives/1128/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
