ラベル iPhone OS 2.1 の投稿を表示しています。 すべての投稿を表示
ラベル iPhone OS 2.1 の投稿を表示しています。 すべての投稿を表示

2008年11月17日月曜日

CS193P Cocoa Programming - 現在4日目

  • メモリの管理についてお勉強
  • allocで領域確保(オーバーライドしない)
  • initで初期化(オーバーライドして使う)
  • 同一オブジェクトを参照するときはretain(オーバーライドしない)
  • コピーするときはcopy(オーバーライドしない、copyWithZoneをオーバーライドするべき)
  • 解放するときはrelease(オーバーライドしない)
  • 実際にメモリから削除されるのはdealloc(オーバーライドして使う)
  • NSAutoReleasePoolとautoreleaseメソッド・・・事前にautoreleaseしておいたオブジェクトは[NSAutoReleasePool releaseまたはdrain]呼び出し時に一斉に解放される

1日に二日分前進。iPhone発売から既に4ヶ月経過、既に無数の超優良アプリがわんさかと出回っています。果たして私は遅れを取り戻せるでしょうか。


これはNSURLから文字列を取得する方法を模索していたときです。
結局、absoluteStringかrelativeStringが正解ということがわかりました。


クラスの作成とメモリ管理。ようやくCらしくなってきたかな?
Objective-Cではガベージコレクションもできるらしいのですが、iPhone開発ではガベージコレクタをぶん回せるだけのリソースはないため昔ながらのメモリ管理でやる必要があります。



いろんなイニシャライザをためしてみました。
リストにオブジェクトを突っ込んだときは、突っ込んでいるNSArray自身もリリースしないと、個々のオブジェクトがリリースされません。おそらく内部でretainされてるんでしょうね。



introspection(Javaでいうところのrefrection)にチャレンジ。instanceof演算子みたいなのはなくて、すべてNSObjectのメソッドとして提供されています。java.lang.refrectionパッケージみたいな面倒さはないです。あとセレクタはSEL型とかいう専用の型があって便利。いわゆる関数へのポインタとして使えます。Javaの何が不満ってこの関数ポインタがないところですよ。



続けてもう一つの宿題のほう(Assignment2B)に突入。いよいよ実際に動作するiPhoneアプリを作ることになるのですが、その前に一つ宿題にバグ?があったのでご報告。
上の画像のカーソルで選択している部分(PolygonShape.h)、Assignment2Aで作成したときにはCocoa/Cocoa.hをインポートしていますが、2BではCocoaが使えない(iPhoneアプリになるため)ので、Foundation/Foundation.hに書き換える必要がありました。



で、これが完成品です。
SwingやWin32API開発並みの苦行を覚悟していたのですが、あまりに簡単で逆に拍子抜け。はまりそうな点といえば、プロジェクトに新しくクラスをインポートしたり作成した後はInterface Builderからアプリケーションに登録しなければならないというところぐらいでしょうか。あと、awakeFromNibはコントローラに実装しないとだめ(間違えてPolygonShapeに一生懸命実装して、ビルド直前にこの過ちに気づきました)。


今のところは楽勝。問題はOpen GL ESに手を出すあたりからでしょうかね。

2008年11月16日日曜日

User-Agentを偽装して、YahooBB! BBモバイルポイントにタダのりを試みた

  • 実験場所:都内某所のマクドナルド
  • iPhoneからの接続:良好。速度も申し分なし。ただし電波強度がいまいち。
  • MacBookからの接続:失敗。User-Agentを偽装しても、iPhoneエミュレータからアクセスしてもだめ。UAを正しくiPhone2.1に設定していなかったのが原因と思われる。再度調査する
  • 電波の発信場所はおそらくバックオフィス内、バックオフィスに近い場所の方が電波的に有利(場所によっては外にもアンテナがある?)
  • どうでもいいけどマックは煙たくて騒々しい、そのかわり安くて人がたくさんいて面白い
  • スクリーンショットとってくるの忘れたorz

遅ればせながら手持ちのiPhoneで実験してみました。駅構内とかでも使えるのかと思っていたら想像以上にBBモバイルポイントのアクセスポイントが少なく、結局マック以外まともな場所がないということがわかってちょっと残念。

○まずは店内の電波強度を試験してみる
WiFiFoFumというアプリを利用して店内の電波強度を測ってみました。
結果、店のカウンターの手前が最も強力(RSSI = 40程度)で、2階の禁煙席付近はRSSI = 20前後でした。常にWifiアンテナ表示が2本程度という感じです。


○iPhoneからつなげてみる

電波が弱いのでちょっと心配でしたが無事接続できました。速度も相当快適です。YouTubeの動画でも問題なく視聴できるはずです。


○禁断の果実(?)MacBook Airからつなげてみる
User-Agentによって接続デバイスを判定しているという噂があったので、噂を信じてSafariのユーザーエージェントをMobile Safari 1.1.3に変更していざMacBookから接続!

・・・だめでした。XcodeからiPhoneエミュレータを起動して試してもやっぱりだめ。くそう、そんなに甘くなかったか・・・

と思ったら、どうやら私の試した設定が悪かったみたいです!
Windows版SafariのUA追加方法 | iPhone 3G Wiki blog
これはWindowsでの設定方法ですけれども、要するに開発メニューから選択できるUAはiPhone OS 2.1ではなくて1.1.3(昔のiPhone)だったためうまくいかなかったと。
Mac版のSafariでは、以下のファイルの中身を適当に書き換えると、「開発」メニューからiPhone OS 2.1のUAを選択できるようになるみたいです。
/Applications/Safari.app/Contents/Resources/UserAgents.plist
に以下のUser-Agent文字列を見よう見まねで追加する:
Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_1 like Mac OS X; ja-jp) AppleWebKit/525.18.1 (KHTML, like Gecko) Version/3.1.1 Mobile/5F136 Safari/525.20
これでまた来週試して結果をご報告したいと思います。


○結論
もしこれでただ乗りに成功できれば、しばらくはマックが主な勉強場所になりそうです。

2008年11月9日日曜日

CS193P Cocoa Programming - 1日目の宿題Aをやってみた

  • http://www.stanford.edu/class/cs193p/cgi-bin/index.php
  • これはわかりやすい
  • 宿題があるのが実にうれしい
  • Interface Builderで配置したクラスの属性(位置とか表示するイメージとか)を操作するときは、Command + Shift + I またはCommand + 1から4
  • Labelの文字の大きさとフォントは変えられたが色とか太字はなぜかうまくいかず
  • vertical centerな配置やholizonal centerな配置を行うには、メニューのLayout > Align
今日からスタンフォード大学の学生になった気分でさくさくっと勉強。
手始めに1日目の宿題から。・・・こんなに宿題を嬉々としながらこなす私の姿を学生時代の自分に見せてやりたいものだ。
一つ目の宿題は、コーディングはいっさいなく、interface builderからCocoa Touchが用意しているviewやclassを配置して画面をデザインしてビルドして走らせるだけというもの。


こんな感じでinterface builderにパーツを配置して・・・


できた!初日の宿題だけあって実に簡単。

こういったグラフィカルなGUI作成機能は別に目新しいものではない(Microsoft Visual Studio 2005などでもできる)が、これまで使ったことがあるツールよりは使いやすかった気がする。まぁVS2005はマイクロソフト語で書かれているので読めない=論外だし、Eclipse GEFはそもそもSwing自体があまりよいフレームワークでなかったため使いづらかった。
なによりiPhoneの場合はデバイスの画面サイズが決まっているから絶対座標指定がしやすい。