UI周りがややこしいので、通信から理解することにした。

以下は覚え書き。

参考にしたサイトは以下。

http://www.atmarkit.co.jp/fsmart/articles/iphonesdk04/01.html

twitterのTLをxml形式で取得するというアプリになっている。

Navigation-based Applicationでプロジェクトを作成。
最初に呼び出される関数は、

viewDidLoad()である。
そこから、実処理へと移る。


NSNotificationCenterへ成功と失敗のコールバック関数みたいなのを登録する。
NSMutableURLRequest、URLConnectionを使用して、HTTP通信を行う。
HTTP通信のレスポンスと登録したコールバック関数がリンクしているので、
あとは登録通りに処理が進む。

iOSの開発も始めようということで、重い腰をやっと上げました。

appleのSample CodeからHelloWorld_iPhoneなるプロジェクトをダウンロード。
解凍し、ビルドしても通らない…。

SDKROOTをxcodeに合わせてエミュレータ上で動作確認。
(今回はSDKROOT=iphoneos4.2)


ソースコードを読んでみると、Classes/MyViewController.*が実体みたいだ。
プロジェクトのスタイルはView-based Applicationとなっている。
なので、MainWindow.xibの他にHelloWorld.xibで描画部を構成している。


textFiled、label、stringが連携して動作させているみたいだな。

textFieldShouldReturn{}はイベントを通知してくれる関数みたい。
テキストフィールド内でリターンを押すとupdateStringを実行して、
label内の変数が変わる仕組みらしい。

他にも、テキストフィールドをタッチするとキーボードを表示させたりの
処理もあった。

イベントトリブン型な構造になっているな。
関数とかオブジェクトのやり取りを理解できれば問題なさそう。

次は、SimpleURLConnectionを理解しよう。
xperiaのネットワークデバイスが気になったので調べてみました。
以下は、adb shellで見たものです。

WiFi off

$ netcfg
lo UP 127.0.0.1 255.0.0.0 0x00000049
dummy0 DOWN 0.0.0.0 0.0.0.0 0x00000082
rmnet0 UP 110.160.34.104 255.255.255.252 0x00001043
rmnet1 DOWN 0.0.0.0 0.0.0.0 0x00001002
rmnet2 DOWN 0.0.0.0 0.0.0.0 0x00001002
usb0 DOWN 0.0.0.0 0.0.0.0 0x00001002
sit0 DOWN 0.0.0.0 0.0.0.0 0x00000080

WiFi on

$ netcfg
lo UP 127.0.0.1 255.0.0.0 0x00000049
dummy0 DOWN 0.0.0.0 0.0.0.0 0x00000082
rmnet0 UP 110.160.34.104 255.255.255.252 0x00001043
rmnet1 DOWN 0.0.0.0 0.0.0.0 0x00001002
rmnet2 DOWN 0.0.0.0 0.0.0.0 0x00001002
usb0 DOWN 0.0.0.0 0.0.0.0 0x00001002
sit0 DOWN 0.0.0.0 0.0.0.0 0x00000080
wlan0 UP 192.168.1.72 255.255.255.0 0x00000043


rmnetのデバイスドライバは、kernel/drivers/net/msm_rmnet.cに記述されている。
wlanはいくつか候補があって、どのドライバを使用しているか分から無い。

rmnetは、eth_type_transがあるので上位層とはethernetの型でやり取りしているっぽい。
上位層へのキューイングはnetif_rx()でやってます。
デバイスへの書き込みはkernel/arch/arm/mach-msm/smd.cに記述されている。
途中のデータフローは未確認だが…。