スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

New types may not be defined in a return type ってエラー

Objective-C++書いてて、「New types may not be defined in a return type」ってエラーが出た、けど。ただ単にclass MyClass {
} ←に入るべきセミコロンを忘れてるだけだった...

恥ずかしい///

やっぱり、Objective-CとC++って雰囲気というかクラスの書き方が全然違うから、Objective-Cから入った僕はC++の書き方に未だになれていない...
スポンサーサイト

一番最初にやった言語が一番いいと思ってしまうものかもしれないですね

とうとう、スクリプト言語に本格的に入り込みそうになってしまいますた。

PHPですね。ハイ。

これからはPHPネタもここに入っちゃうかもしれないですが、よろしくお願いしますね。

まぁ、なんか、Objective-CはJavaに比べれば型チェックとかが甘い(存在しないメソッドに送信できたり、、、つまり、動的に決まる点が多い言語ですからねObejctive-Cは)ですが、PHPは型が勝手につけられるというまぁ動的型付けな言語です。。。。って常識ですかね。。PHPerは多いですし。

まぁ、とにかく覚えるのが楽だとか言われているらしいんで、ちょっとくらいやっても大丈夫かなてきな乗りで始めちゃおうと、思っています。

中途半端にならないといいですね

プロパティ

どうも

プロパティについて。書きたいと思います。プロパティとは、ざっくり言えばなんていうか、今まで使ってきたアクセサと、セッタと同様な事と言えます。

【プロパティの宣言】
例えば、ありきたりすぎるんですが、int型のvalueと、NSStringオブジェクト型のオブジェクトnameを持っているオブジェクトがあったりするとします。すると、

@interface MyObject : NSObject
{
int value;
NSString *name;
}

@property (readwrite) int value;
@property (readwrite, copy) NSString *name;

@end

はい、こんな感じです。

この太字で書いた部分は、つまり、アクセサやセッタを宣言しているような感じになっているわけなんですね。

では()の中にあるのは何なのでしょうか?これは、プロパティとして宣言したインスタンス変数にどの程度アクセスを許すかという事になります。readwriteは、見てもわかるように、「書き込み、読み取り可能」という事を宣言しています。
copyは、「そのインスタンス変数をコピーする事ができますよ」という宣言になります。
また、プロパティには、オブジェクト(id型、その他)も宣言する事ができます。そのとき、オブジェクトが解放されないように、retainを()の中に宣言する事ができます(ガーベジコレクションを使わなかったとき)。また、ガーベジコレクションを使った時にはassign(xcodeの補完機能でいつも入力しているため、スペルが間違ってるかもです)を宣言できます。
などなど、とにかく()の中には、他のオブジェクトからアクセスされるとき、どの程度まで許すかを設定します。

【プロパティを利用する】
@interfaceで宣言しても、@implementation内で使えなければ意味がありません。そこで、その変数を利用しますよという宣言になるのが、コンパイラ指示子「@synthesize」です。あ、コンパイラ指示子は@とかではじまるコンパイラへのメッセージみたいなのの言い方です。宣言の仕方は、
@synthesize value;
@synthesize name;
という感じです。簡単ですね。
こうするだけで、そのインスタンス変数を利用する事が出来ます。

【ドットアクセス】
このように宣言すると、C++などではよくある「ドットアクセス」を利用できます。ただ僕としてはなんかあんまり使いません(というより、なんか使うといつもコンパイラに文句を言われるので...汗。ちょっとまだ使い方に困っています..)。が、一応。
上のオブジェクトのvalue変数にアクセスするには、
MyObject *myObject;
int a = myObject.value;
のような感じでいけます(はず)。あ、ただ、id型ではできないのに注意を!できないんです。ハイ。

C++から来た人は分かりやすい書き方のはずです。

こんな感じですかね。

そうそう。プロパティ宣言したインスタンス変数は、アクセサ、セッタを作ったようなものなので、当然、
MyObject *myObject;
int a = [myObject value];
というように使えます。

この自動的に作られる、アクセサ、セッタの名前は
アクセサ・・・「変数名」
セッタ・・・・「set」+「最初を大文字にした変数名」
という感じです。あ、当然かぎ括弧は入んないですよ!!

つまり、もし、アプリを作っていてアクセサが作動したログとかをコンソールに書き出したい場合には、この名前のメソッドを作れば、そっちが実行されます。(はず)

まぁやってみれば分かります。

ではこれで

キー値コーディング1

勉強しなければいけない所ですが、このタイミングでレポートが行き詰まりちょっと、息抜きに更新を。

息抜きなのか?まぁいいや。どこまで行きましたっけかな?多分、辞書については説明してないですけども、あまりにも便利なんで「キー値コーディング」について書きます。何回かに分けると思われます

@説明開始
【キー値コーディング-概要-】 
キー値コーディングの概要に入る前に。これなんて読むんだ?詳細は知りませんが、僕としては「キーちコーディング」と読んでます。が。「キーあたいコーディング」とか「キーねコーディング」とか、ほかにも「キーバリューコーディング」とか読めますね。ハイ。C++を「シープラ」「シープラスプラス」と言うようにいろいろと読むのと同様に、どのように読んでもいいんじゃないですかね。少なくとも、英語では「キーバリューコーディング」なので、これなら確実なんじゃないですかね。

はい。これなんなのか。これは説明していないですが「プロパティ」の一種です。まぁこれを購読している人はいないみたいですし大丈夫でしょうね。そっか。プロパティについて説明しなきゃいけないのか。めんどくさいな。
じゃぁ新しい記事書きます。これは一度ここでとどめときます。ハイ。

デリゲート

どうも。最近更新途絶えていました。

まぁそれはおいておいて。

今回はデリゲートあたりならたいして時間を食わなそうだったんで説明します。

【デリゲート】
まず最初の疑問。「委譲」ってなんて読むんだ?普通に読んだら「いじょう」でしょうか。まぁPCの前にたってれば、変換できるかで分かるんですけれども、本の前だとそれでいいのかどうか分かんなかったり分かったり。
んで、「委譲」って書いてあるのに読みを「デリゲート」って読んでたり。
まぁ読みはコレを読んでる時点で分かると思いますが、「いじょう」です。まぁ今回はわざわざ「委譲クラス」とか書かないで、「デリゲートクラス」ないし「デリゲート」って書きますかね。ハイ。

デリゲートとは、その名の通り、誰かに何かを委譲する。つまり頼むって言う感じですかね。プログラミングで言うと、例えばオブジェクトobjとオブジェクトobjDelegateがあったとして、objにメッセージmesが来たとします(objDelegateは、objのデリゲート。つまり、なんらかのタイミングでobjからメッセージが来ます。この何らかのタイミングを今から説明します)。しかし、objはmesに対応することができなかった(つまり対応するメソッドなどがなかった)。すると普通なら、例外として処理され強制終了します(今回の話には関係ないですが、存在しないメソッドを呼び出せるあたりも「動的言語」な感じですね)。しかし、存在しなくてもオブジェクト自身にデリゲートが存在した場合、そのオブジェクトに、メッセージ処理を依頼できるんです。これが、デリゲートの概念っていうか、そういう感じです。

そして、自分自身にデリゲートを設定するときは、
- (void)setDelegate:(id)anObject
で設定できます(anObjectの部分にデリゲートさせるオブジェクトを設定する)。

で、このデリゲートが便利なのは、っていうかかなりよく使われるのがGUIを使ったアプリケーションのときです。NSApplicationMainという関数でNSApplicationのインスタンスが生成されます。基本的にはこのインスタンスのデリゲートとして様々な動作を制御することができるのです。

@説明終了

最後少し適当でしたが、デリゲートについては、ちゃんと書きました。ハイ。

どうでもいい話ですが、iPad2出そうですね。OS自体の大きな変更は無いが端末自体がかなり改造されて発売されるっていうのが世の中の大多数の見方みたいですが。

まぁmacのLionも夏出るみたいで、macもiPad化していくみたいですから、はやく売れそうなアプリケーションを作りたいところですね。

後、全然話が違いますが、ここ最近本当にmacの調子が悪いです。ハイ。もっさりし過ぎです。速くメモリを解放しないとなかなか直らなそうですが、ハイ。さっきからこの記事を書くのになかなかタイプしても文字が出てこなくてイライラしています。ブラウザの問題か。firefox使ってますが(safariも好きですが、なぜかここだけはこっちが)、タブがとてつもない量ですが、とてつもない量で逆に消したくないという衝動に駆られてしまっています。

まぁここらへんで。って書いてたら、ドラッグが前々反応しない。ハー。やっぱりタブ消さなきゃです
プロフィール

小さなプログラマ

Author:小さなプログラマ
小さなプログラマです。

これはあくまで、「勉強ログ」なので間違っている場合が多々あります。

なので、このブログに書いてあることは、8%くらいの信じ度でお願いします。

間違っているじゃないか!と言われてもあれなので。

最新記事
最新コメント
最新トラックバック
月別アーカイブ
メールフォーム

名前:
メール:
件名:
本文:

カテゴリ
カウンター
検索フォーム
RSSリンクの表示
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。