So-net無料ブログ作成

人生知らない事ばかり(Objective-Cにおける opaque type) [iPhone/Mac関連]

 先日Objective-C 言語仕様に関するメモのエントリーで以下のように記載した。
関数周りのリフレクト関連情報
 ・SEL型(おそらくメソッドに関するメタ情報を保存する構造体)の利用方法
  SEL sel = @selector(@"methodName");
  SEL sel = NSSelectorFromString(@"methodName");
 SEL型についていい加減な事を書いていないか気になったので調べてみようと思ったのがこのエントリーのきっかけ。事態は思わぬ方向に飛んでいき、自分の無知さを思い知り、まだまだ勉強せねばと再認識するに至った過程である。

 とりあえず定義は <objc/objc.h>あたりにありそうだとあたりをつけたのだが、Mac初心者な私としてはファイルがどこにあるかさっぱり検討がつかない。とりあえずSDKのインストールは/Developerにインストールしたような気がするので、ここの下をおもむろに検索してみる。

$ find /Developer -name objc.h -print
 .
 .
/Developer/SDKs/MacOSX10.4u.sdk/usr/include/objc/objc.h
/Developer/SDKs/MacOSX10.5.sdk/usr/include/objc/objc.h

 あったあった。でMacOSX10.5.sdk以下のファイルを開いてみると...
   --objc.h--
   typedef struct objc_selector 	*SEL;    

 お、あるある。よかったやっぱ objc_selector 構造体だよ。で、このobjc_selector構造体はどこにあるんだ?
 このファイル内にはないなー. . .、他にimportしてるファイルは<objc/objc-api.h>と<sys/types.h>ね、これらのファイルもみてみよう. . .ないなー。さらにさかのぼってimportファイルをと. . .あれ?やっぱりないなー。しょうがないので手当たりしだいgrep!
$ grep objc_selector *.h */*.h
objc/objc.h:typedef struct objc_selector 	*SEL;    
$ 

 あれあれ?定義ないの?あらかじめ構造体を宣言せずに利用する事なんかできたかなー?記憶にあるC構文にこんなのないんだが. . .

 というわけで困ったときのgoogle頼み。ありました、ありました。とりあえず、この技法は「ダイナミックObjective-C」のコラムによるとopaque構造体やopaque typeと呼ばれC言語の仕様らしく、松本計画さんのページにサンプルなどが載っていて勉強になりました。

 この件に関してちょっと追い込みが足らないような気がするが、これからObjective-Cの読書会にいくのでとりあえずここまでです。

 いや、人生いくつになっても勉強勉強。

iPhone SDKの開発に入る前に読んでおきたい日本語の資料(開発ツール編) [iPhone/Mac関連]

 Objective-C 2.0編に続いて開発ツール編です。

 書籍などもいくつか出ているようですが、XcodeもInterface Builderも3.0になって大きく変わったという内容をよく見かけるので、古いバージョンの資料と区別しておく必要があるでしょう。


【Xcode および Interface Builder 3.0(3.1)関連資料】
・自作アプリをApp Storeで世界に向けて販売できる!! iPhone SDKプログラミング大全
 タイトルがちょっと長いですが、ついに日本語による初のiPhone SDKに関する解説本の登場です。著者はAppStore他で絶賛されている「乗り換え案内」の開発者で、下のCocoa本を書かれたHDMTの木下誠さん。日本で有数のCocoaプログラマーです。
 目次は以下の内容(HDMTの木下さんのblogより転載)だそうで、とりあえず開発への取っ掛かりとしてはうってつけだと思います。
・iPhone SDKで開発を始める前に
・Objective-C基礎講座
・プログラミングガイド システム編
・プログラミングガイド ユーザインタフェース編
・プログラミングガイド ネットワーク編
・プログラミングガイド メディア編


・たのしいCocoaプログラミング[Leopard対応版]
 ようやくXcode3.1対応の書籍が登場です。木下誠さんの「たのしいCocoa」がLepard対応となって発売されました。iPhoneの開発スタイルと多少の違いはあると思いますが、Xcode3.1や新しいInterfaceBuilderに対応されています。

・Apple本家の紹介ページ
 概要 XCode Tools
  とりあえず、概要などが書かれているので最初にさらっと読んでおきましょう。
 Xcodeインストールガイド
  Xcodeインストールガイドです。
 Xcodeの概要
  Xcodeの概要説明資料

 Apple Developer Documentにある木下 誠さんのCocoa セミナー資料
  iPhone向けのセミナー資料ではありませんが、初めてXcodeとInterface Builderに
 取り組むのであればこの資料からは入るのがいいと思います。
 (PDFとサンプルコードのZIPファイルです)
  初級編 中級編 上級編 

・Mac♪Mac♪Mac♪さんのページ
 画像がいっぱいでちょっと重いですがわかりやすくわかりやすくまとまっています。
 第19回 複数ターゲットを持つXcodeプロジェクト
 第20回 Xcode3.0のInterfaceBuilderでのクラス作成

 Apple本家にはドキュメントが充実しているんだが、いかんせん日本語の資料が少ない。操作系を勉強するには英語になってしまうが、YouTubeを検索するとわかりやすい資料があるかもしれない。

追記:木下誠さんの「たのしいCocoa」Leopard対応版が発売されたので追記しました。
追記:木下誠さんのiPhone開発本が出版予定なので追記しました。

関連エントリー:iPhone SDKの開発に入る前に読んでおきたい日本語の資料(Objective-C 2.0編)


Objective-Cのアクセス制限とJavaのアクセス修飾子を比較してみる。 [iPhone/Mac関連]

 Objective-C 2.0でオブジェクト内のインスタンス変数を宣言する際にはディレクティブを指定して変数の参照スコープを指定することが可能だが、このディレクティブとよく似たJavaのアクセス修飾子を比較してみる。
           
Objective-C
ディレクティブ
Java
アクセス修飾子
意味
@private
private
クラス内でのみアクセス可能
@protected
(デフォルト)
protected
クラス内と派生クラスからアクセス可能
package
(デフォルト)
自分のクラスを含むパッケージ内のクラスからアクセス可能Objective-Cにはパッケージの概念がない為対応するディレクティブは存在しない。
@public
public
すべてのクラスからアクセス可能
原則として使用しない(by butineko)
@package
(64bitのみ)
クラスの実装イメージ(同一コンパイル単位らしい)内の
クラスからはアクセス可能だが、オブジェクトのリンク時にはリンクエラーとなってアクセスできない。
※(デフォルト)とはディレクティブ(アクセス修飾子)を指定しなかった際に採用されるスコープである。

 2つの言語で似ている部分がは多いが微妙にスコープの範囲が違う部分が存在する。言語自体の歴史が違うため、後から作られたJavaはパッケージという概念を導入してうまくスコープ管理を実現していおり、Objective-Cは後追いでフレームワーク単位のコンパイル時に有用な@pakcageを導入したことにより問題を解消している。

 適用範囲としては「Objective-Cの@package > Javaのpackage」の関係となるが、今、Java7でpakcage単位のアクセス制限のみでは細かすぎるとして、より広範囲に適用可能な「スーパーパッケージ」というより概念の導入が検討されていてパッケージ単位のアクセス制限をさらに使いやすくしようとしている。(ちょっと強引なようにも見えますが)

 進化する言語は追いつ追われつ、決して安住できません。

 詳しくはObjective-C 2.0 プログラミング言語内のクラスの定義->クラスの実装->インスタンス変数の有効範囲(PDFの38ページ)の部分に詳しい記載があるので見てみましょう。

iPhone SDKの開発に入る前に読んでおきたい日本語の資料(Objective-C 2.0編) [iPhone/Mac関連]

 いろいろな資料をあさっているうちに何をどこまで読んだのかよくわからなくなってきたので、今読んでいる日本語で読める資料をまとめてみようかと思います。
 ただ、iPhoneのコアAPIであるCocoa touch関連資料は、英語の資料しかない上NDAの関係で今のところADC(Apple Developer Conneciton)に加入しないと読めない状況です。ですから、その前段階の準備としてとりあえずObjective-C 2.0の日本語の資料を集めてみました。


【Objective-C 関連】

詳解 Objective-C 2.0
 通称「萩原本」。500ページ以上というボリュームですが、新しい言語仕様を含めObjective-Cをマスターするのには最適の本です。出費をいとわなければぜひとも押さえておきたいところです。

Objective-C 2.0プログラミング言語
 Apple本家の言語解説資料。Object指向をある程度経験があれば最初の方は読み飛ばしてもいいように思う。Web上で公開されているが150ページ以上もある為Webで読むのはちょっと疲れます。できれば20〜30ページづつPDFを印刷して電車の中で読むのがおすすめです。さすがに「萩原本」を電車で読むのはつらいです。

ダイナミックObjective-C
 書籍なども出されている木下さんのコラムです。かなり古くからの連載の為、2.0以前の内容が多いですが、第96回以降は2.0の内容が記載されています。この継続力にはほんとに頭が下がります。

Leopardで刷新されたMac OS X対応開発言語「Objective-C 2.0」の真価を探る
 同じく木下さんの記事で初期のObjective-Cの経験者はまず、このページを読んでみるのがいいでしょう。

The comp.lang.objective-C FAQ listing 日本語訳
  comp.lang.objective-CというNewsGroupで作成されたFAQの日本語訳です。2.0の仕様にも言及されていて、FAQの作成者や訳者の方々には頭が下がるばかりです。他の言語からの参入組はこの資料でざっとわからないところをかいつまんでから、本格的に言語仕様に入り込むと良いかもしれません。

関連エントリー:iPhone SDKの開発に入る前に読んでおきたい日本語の資料(開発ツール編)

MacBookで覚えておきたいキーボードショートカット [iPhone/Mac関連]

 とりあえず、開発を行うにあたってキーボードショートカットを覚えないことには話にならんのでいろいろと試してみながらキーボードショートカットの備簿録を作成。まとめていくうちにテキストフィールドのキーボードショートカットがEmacs Likeであることを発見し思わずラッキー!
 Macユーザにとってはあまり当たり前のことだろうと思われるので、最初は自分専用のGoogle Groupに記載しようと思ったのだが、safariからページの作成や変更ができないことが判明、FireFoxをいれたりとか時間がもったいなかったのと、Googleのトレーラに食べさせれば一人か二人くらいの役に立ってくれるかと思い直してBlogに記載しておくことにした。
 とっとと慣れてiPhoneの開発にかかりたい。

 Windows乗り換え組としては ALTキーの代わりがCommandとOptionの二つに分かれているのがちょっと戸惑う. . .(Windowsキーの代わりだと思えばいいのか?)

 ・テキスト入力領域でのカーソル移動(なんとemacs likeな入力ができることにびっくり)
   カーソルを一つ右へ移動   control+f、もしくは→
   カーソルを一つ左へ移動   control+b、もしくは←
   カーソルを一つ上へ移動   control+p、もしくは↑
   カーソルを一つ下へ移動   control+n、もしくは↓
   カーソルを1ワード右へ移動 control+option+f、もしくはoption+→
   カーソルを1ワード左へ移動 control+option+b、もしくはoption+←
   入力行の一番右へ移動    control+e、control+←、もしくはcommand+→
   入力行の一番左へ移動    control+a、control+→、もしくはcommand+←

   選択をしたい場合は上記の操作をshiftキーを押しながら実行
   テキスト領域すべてを選択したい場合はcontrol+a

 ・テキスト入力領域での文字の削除
   カーソルの右の文字を削除 cootrol+d
   カーソルの左の文字を削除 delete
   カーソルから左の文字をすべて削除 command+delete

 ・ウィンドウ閉じる系の操作
   アプリケーションの終了         command+q
   アプリケーション内のウィンドウを閉じる command+w

 ・サファリでタブを移動する
   command+Shift+左右の矢印キー(但しText入力カーソルがある場合は効かない)

 ・テキストエディター等で「保存しない」「キャンセル」「保存する」の3択
  の選択肢がある場合。tabキーでフォーカスを移動できないのに戸惑っ場合た。
   「保存しない」 command+D
   「キャンセル」 esc
   「保存する」  return

 ・ダッシュボードの表示
   F4(辞書くらいしか使わないかも)

 ・スポトライトの検索
   control+space(carbon emacsでdefaultでmarkできなくて焦った)

 ・ことえりの日本語英語入力切り替え(日本語キーボードの場合)
   日本語モードに変更 かな
   英語モードに変更  英数
   モード切換え    command+space

あとは気づいたら追記していこう. . .

Objective-C 2.0的流儀(プロパティ機能) [iPhone/Mac関連]

Objective-C 2.0で新規追加された機能についての備簿録。とりあえず今回はプロパティ編

・プロパティ機能
 基本的にはC#などと同様インスタンス変数に対するアクセサーメソッドの記述を省略できる言語仕様、今時の言語は標準装備なのかな?

 参考になるのはAppleのこのページ

まず、宣言方法。ヘッダーでインスタンス変数を定義する。
@property(attributes) Type variableNameList;

・@propertyはキーワードとして固定

・attributesは括弧ごと省略することも可で記述する場合は以下の内容が記述できる。
 readwrite, readonly, copy, nonatomic
 なるほどcopyがかけるのか、これでmutable型の変数でも破壊されないことが明確になるんだな。こりゃ便利。nonatomicを記述するとマルチスレッド環境下で再入可能(こんな言い方いましないのか?)になる。このほかにもassingやらretain等々いくつかかけるようだがとりあえず押さえておきたいのはこの程度で、もっと詳しく知りたい人は詳解 Objective-C 2.0のP.293を参照して。

・Typeは型なので、NSStringとかの型名を記入

・variableNameListはインスタンス変数名で、複数の記入が可能

ヘッダーファイルの記述例(sample.h)
#import 
@interface MyClass : NSObject  {
  int varOfInstance
  NSString *str1, *str2
}

@property(readonly) int varOfInstance;
@property NSString *str1, *str2;

@end

次に実装部分の記述方法

 @implementation内に@synthesizeの記述を行うことで、アクセサーを省略できる。(sample.m)
#import "sample.h"

@implementatioin Sample

@synthesize varOfInstance;
/* 以下の部分がいらなくなる(書くことも可)
- (int) varOfInstance {
 return varOfInstance;
}
*/
@synthesize str1, str2; /* アスタリスクの記述は必要ないようだ */

@end

言語はこうやって進化していくのね. . .





Objective-C 言語仕様に関するメモ [iPhone/Mac関連]


 数年ぶりのObjective-Cなので思いっきり忘れてしまっている部分を木下誠さんのページをみながらサマリーを記録

 とりあえず、Objective-C 2.0に関する解説ではないが、2.0に関しては右の書籍を購入済みなのであとでじっくり読んで差分を埋めることにする。メモリ管理とかかわっているという話だしあまりにも錆びついた知識を発掘することが先決

 iPhone SDKに関してはとりあえず、インストール後、新規プロジェクト&ビルドでシミュレータ上で素っ裸のアプリを稼働するところまでいったのだが、Mac知らねー、XCode知らねー、InterfaceBuilder知らねー、Objective-C4、5年ぶり状態なのでまだほとんどいじることができない状態。とりあえず、なまった体をもとにもどさねば. . .

NSClassはオブジェクト(インスタンス)のメタ情報であり、NSClassを取得する方法に関するメモ

 ・Classメソッドを利用する方法
   Class class = [NSString class];
   Class class = [object class];

 ・静的リンクでコンパイル時にクラスが存在しない場合などクラス名を文字列で指定する場合
   Class class = NSClassFromString(@"DynamicBindingClassNam");

インスタンスのクラス判定方法
 [object isKindOfClass:[NSString class]で少なくともクラスが同じかどうかは判定可能
 派生クラスが確認できるかどうかは確認する必要があり

関数周りのリフレクト関連情報
 ・SEL型(おそらくメソッドに関するメタ情報を保存する構造体)の利用方法
  SEL sel = @selector(@"methodName");
  SEL sel = NSSelectorFromString(@"methodName");

 ・メソッドの実装判定
  if([object respondsToSelector:@selector(@"methodName")]){
   NSLog(@"method ありーの");
  }

 ・メソッドのリフレクト
  [object performSelector:@selector(@"methodName")];

くそおもいっきり忘れてるじゃねーか

Mac初心者がMacで開発環境を整える。(その2) [iPhone/Mac関連]

macをほとんど知らない筆者が開発環境を整えるまでの備簿録の続き。

・とりあえず、XCodeをバンドルDVDからインストール
  バンドルDVDの2枚目から XcodeTools.mpkgとDashcode.pkgをインストール
  WebObjects.mpkgはとりあえず保留。
  バージョンいくつが入ってるんだろ? 5.3かな?

・各種開発用ツールをインストール
 知らないツール発見 MacPortsってなに?
  MacWiki - MacPortsを読むとどうやらMac用のパッケージ管理ツールらしい。
 MacPortsインストール
  本家よりインストールイメージをダウンロードしてインストール
  なんかこのMacWikiというページが使いやすそうなのでBookmark入り

 Emacsの導入
  とりあえず、個人的にはこれがないんと何も始まらない。
  Finderや各種shよりDiredのほうが大事
  うーん、Mac用のEmacsはいくつかあるのかな?とりあえず、Macと戯れることが
  目的ではないので、導入が容易そうなCarbon Emacsをこのページから導入

・Microsoft関連ツールの導入
 VirtualMachineの導入
  いきなりSunのツールだけどVirtualBoxを導入。
  だってWinとマルチプラットフォームかつタダなのこれだけだもん。
  これでWindowsとMacでイメージファイルを共有できそう。
  現在Windows上のVMがHyper-V/VirtualPC/VM Ware/VirtualBoxと
  ばらばらなのでそのうち整理する必要あり。

 RemoteDesktopの導入
  我が家ではサーバのコンフィグレーション用に必須のツール。
  Microsoftのページダウンロードしてインストール

・ソフトウェアアップデート
 いっぱい、全部で1GByteくらいダウンロード

・iPhoneSDK ダウンロード
 全部で1.25Gダウンロード中

 とりあえず、今日はここまで。

Mac初心者がMacで開発環境を整える。 [iPhone/Mac関連]

 macをほとんど知らない筆者が開発環境を整えるまでの備簿録。

 こんなこともあろうかと昔 GoogleReaderで星をつけておいた記事が活躍
  MacBook 買った後にやったことまとめ - IT戦記

 まず、「最初に電源を入れると起こること」を踏襲
   ユーザ登録情報のところで、日本語が入力ができない。
   いきなりなんか違う. . .
   記事の内容と比べてみると
   「キーボード入力環境を選択」のところでUSキーボードしか出こなかったぞ。
   その他の選択肢を表示しても出てこなかった。
   バック/バック/バック あ、戻りすぎてかっこいいムービーを2回見る羽目に. . .
   キャンセル方法わからず、あたふたしているうちにムービー終わる。
   そしたらなにげに選択肢に「ことえり」発見。何やったんや. . .

   とりあえず、一度Finderを出したところで、再インストールもまねしてみる。
   クリーンインストールを選択するとファイルフォーマットの選択で、
   Mac OS 拡張ジャーナリングはよいとして、ファイル名の大文字/小文字を
   区別するかどうかを聞かれてちょっと悩む。
   i-node(UNIX)は区別するし、NTFS(Win)は区別しない、
   UNIXライクにしたいので前者にしたいのだが、
   デフォルト「区別しない」がになってるのに、不慣れな環境でデフォルトを
   無視するのに躊躇したが、結局区別する事にした。
   はやくZFS選択できるようにしてくれ。

   現在インストールDVDのチェック中(チェック対象はHDじゃなくてDVDかよ、おい!)

 次開発環境ととのえる。

追記:元ネタと比べてあまりに新情報がない事を発見。
  TB送っちゃったし. . .

  まだ、いまMachintosh HDにインストール中。
  Macは再インストール中にも黒地に白文字の画面は出てこないのね。さすがだ. . .

結局MacBook調達 for iPhone SDK [iPhone/Mac関連]

 昨日はiPhoneの勉強会で今日はandroidの勉強会。昨日の懇親会の方々に後押しされて、今日の勉強会の前にとりあえずMacBook+4G memory(約8400円)を調達してきました。これからしばらくは環境設定とSDKの習得に明け暮れたい . . .

 でもそんなの家族が許してくれるわけもなく、少しでも早くiPhoneSDKに慣れたいのだが地道に睡眠時間を削って寝不足と戦うことになるのだろうか. . .

--
butineko
nice!(0)  コメント(1)  トラックバック(0) 
共通テーマ:携帯コンテンツ
メッセージを送る
RSS RSS

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。

×

この広告は1年以上新しい記事の更新がないブログに表示されております。