2011年4月28日木曜日

objective-C メモ1・クラスの宣言と定義

Objective-Cについてのメモです。言語についての解説ではありません。
本やサイトを読むだけではなかなか覚えることができないので、書いて覚えようと思います。後から思い出すきっかけになれば良いだけなので、トピックだけを抽出してまとめます。Objective-Cの基本となる言語はC言語のようですが、Cは知っているのでそれ以外についてのみ書きます。
Objective-C

・コンパイラディレクティブによって、オブジェクト指向部分を拡張しています。・Cに比べて多少言語拡張されています。例えば、for 〜 in などのコレクションへのアクセスなど。

基本
  • 文字列には、先頭に@を付加します。@”メッセージ!”
  • フォーマット指定子は、基本、C言語と同じで以下が拡張されています。
    %@=オブジェクトの内容

インポート 
#import <ヘッダファイル>
#import "ヘッダファイル"

クラスの宣言と定義 
@interface で始まり @end で終わります。
@interface クラス名 : 親クラス名
{
 インスタンス変数宣言
 ...
}
メソッド宣言
@end

メソッドとインスタンス 
クラスのメソッドは、インスタンスメソッドとクラスメソッドの2つがあります。

■インスタンスメソッド : インスタンスに対して実行するメソッドです。

メソッドの宣言
 - (戻り値型) メソッド名 : 仮引数リスト ... ;
※- 記号のメソッドをインスタンスメソッドと呼び、+ 記号で始まるメソッドをクラスメソッドと呼びます
例)
@interface Test : Object
- (void)method;
@end
 
インスタンスメソッドの実行
 [インスタンス メッセージ]
 例)
 [myself name] 
 
■クラスメソッド : 特定のインスタンスに依存しないメソッド
 
クラスメソッドの実行
 [クラス名 メッセージ]
 例)
 str = [NSString alloc]; 
 
 例) メソッドの戻り値がオブジェクトの場合は、複数のメソッドを続けて実行することができます。
 生成と初期化を連続して実行する例。 
  str = [[NSString alloc] init];
 
■インスタンス変数の宣言 (C++のクラスポインタ宣言と同じですね)
 クラス名 *変数名; 
 例)
 NSDate *date;
 
■インスタンスの生成
 変数 = [クラス名 alloc];
 allocメソッドは、インスタンス変数を初期化します。 
例)
 date = [NSDate alloc]; 

■クラスに応じた初期化メソッド init
例)
 date = [date init];
 
↓ 1行で実行
 
 date = [[NSDate alloc] init];
 
↓ newメソッドを使用する。
 
 date = [NSDate new]; 
 
■汎用データ型 id ※コンパイル時に型チェックされません。
 
id date;
date = [[NSDate alloc] init]; 
 
■インスタンスの開放は、release メソッドを使う。
 
[data release];
 
・自動開放の指定は、生成時に autorelease メソッドを使う。この自動開放の仕組みは NSAutoreleasePoolクラスによって実現されている。
テンプレートからプログラムを作成することで、この開放処理記述は省略できる。
また、この自動開放が組み込まれた標準クラス・メソッドもある。
例)
 name = [NSString stringWithString:@"Masayuki"]; 
 
クラスの定義 
@implementation コンパイラディレクティブを用いてクラスを定義しなければなりません。

@implementation クラス名
メソッド定義
...
@end 
  
<基本的なクラス定義のSample> 
#import <stdio.h>
#import <objc/Object.h>

@interface Test : Object
- (void)method;
@end

@implementation Test
- (void)method {
 printf("テスト\n");
}
@end
 
/* 
 main 
*/
int main() {
 id obj = [Test alloc];  // インスタンス化
 [obj method];  // method呼び出し   
 return 0;
} 
 

2011年4月24日日曜日

MacBookAir に Windows7環境を構築

開発環境にはWindows7も必要です。いまどきの開発ですから、わかりますよね。
このためMacのVMWareFusionにWindows7環境も作りました。この環境は開発がメインなので、windows7でVS2010を使うのが目的です。しかし、仮想環境なのでディスクスペースがそんなにありません。メモリもvaio時代(8G)の1/4(2G)です。このため、windows7上の作業は、必要最小限に絞りたいところです。
そこで、ドキュメント(主にExcel)をmacかwindows7か、どちらで編集するか悩みました。問題は操作性です。プログラム開発と同じくドキュメントも効率よく書く必要があります。

よく使うExcel(最新)の操作性を比較をしてみました。
Excelのバージョンはそれぞれ以下です。
mac  : Excel 2011
win7 : Excel 2010

(1)
行の挿入がキーボードだけで可能 評価: Win7 ◯ mac ×
(alt → r → i )
※私の編集方法は、思いついた分類や見出しを適当に行の間隔を空けて、バババと書いていきますので、後から空行が足りなくなり、行挿入の操作を頻繁に行います。
(2)
画面表示が、macの場合、125%に拡大しないと人並みな大きさになりません。これは致命的です。(文字が小さいままで編集すると、なぜかいい加減な文章になってしまいます。)そして、うっかり125%に拡大したまま人にメールすると、添付ファイルを開けたときに、まず「でかっ!」と思われます。内容を読んでもらえたとしても、「それにしても字、でかいなぁ・・・」と、内容とは無関係な印象が大きく残ってしまいます。
評価:Win7 ◯ mac ×
(3)
セルの編集のキーが、macの場合、control + U で、win7の場合、F2キー一発です。
評価:Win7 ◯ mac ×
 
たった3項目の比較ですが、この時点で勝負はついてしまいました。使い慣れたWin7のExcelを使用することにします。
<参考画像>
上が、mac版Excel2011
下が、win版Excel2010 (ユニティ)

2011年4月2日土曜日

MacBookAirにWindowsXpをインストール (3)

最近やけに、vaioのXpMode(Windows7)さんがサクサク動くようになりました。以前はもっさりしていたのに。
もしかして、Mac内のWindowsXpに移行しようとしていることがバレた? 誰に!?

でも、注意してるんですよ、vaio-typeZさんには気付かれないように。
以前使っていたThinkPadさんは、私がこっそりvaio-typeZさんに移行しようとしているときに、次々壊れましたからね・・・。ディスクのアクセスランプさんが点滅しなくなったり、筐体の端が欠けたり。

(※気づきました?XpModeさんやvaio-typeZさんに”さん”づけしてること。さすがにアクセスランプに”さん”はいらんか・・・用心深いのであれですが)

そもそもWindows7のXpModeで困っていたことは、大きく2つ。
1.VS2003 + Infragistics + FlexGrid.Net で開発したプロジェクトが開けないこと。
→ このために、thinkpadをいつでも使える状態にしています。
2.ODBCの登録で、ときどき「権限がない」と言われ、はじかれること。
→ 特権モードで起動してもだめでした。

3.もっさりしていて遅いこと。
あ、3つありました。

このために、vaio-typeZ と thinkPad(14.1inch)を背中にしょって出張していることもありました。
電源も合わせるとパソコン類だけで5kgぐらいしょって移動していたと思います。
あの頃は、「修行」という一言で済ませていましたが、さすがにね、歳も歳ですから、人に「いつまで修行してるんだ!」とも言われかねませんしね。
それと、何が面倒って、飛行機に乗るときに、荷物検査でノートパソコン2台を出してトレイに乗せて、それとは別に荷物を持って、夏ならそれだけ一汗かきますよ、実際。

前置き、長っ! 長すギル。

結局、あなたは誰ですか?
Macですか?Windowsですか?
そういう概念が必要ないんですか?
ということなんだと思います。

とにかくこれからはWindows7だ!ということで、なんとかXpModeでやりくりしようとしていた頃が
既に懐かしい・・・です。
VS2003(.NET1.1)のプロジェクトも難なく開きました。
あとは、実行あるのみです。それは酔いが覚めてからにします。

2011年4月1日金曜日

MacBookAirにWindowsXpをインストール(2)

またアレです。泡盛です。

まずは驚きの結果から。
Windows7のXpModeよりちゃんとしたXpでした。当然ですよね。仮想マシンですから。
VS2003、InfragisticsのNetAdvantage、FlexGrid.NET 、PervasiveV8、
それぞれ、ちゃんとインストールすることができました。
以前、Windows7のXpModeではIEが新しすぎてインストール途中で弾かれました。
弾かれました。2回言いました。忘れないように。

そして、MacOS X上のVMWareFusionには、Windows(仮想マシン?)を表示するモードが3種類あります。
・フルスクリーン
・シングルウィンドウ
・ユニティ
ん?ユニティ?・・・

フルスクリーンの説明は省略します。
(将来にわたって忘れることはないと思われますので。)
シングルウィンドウは、以下のような画面です。
ま、だいたい想像はつきますね。
では、ユニティ、とは?
恐る恐るメニューから選択してみます。
すると、どうでしょう!
MacOS X の中に、WindowsXpのExplorerや、notepadが現れました。
恐るべし、匠・・・、いや、Mac OS X !
このパワーに打ちのめされて、本日の移行作業を終了します。