ラベル objective-cの勉強 の投稿を表示しています。 すべての投稿を表示
ラベル objective-cの勉強 の投稿を表示しています。 すべての投稿を表示

2011年1月5日水曜日

objective-cにもラッパークラスはあった

本を読み進めていくなかで、やっぱり出てきたという感じのラッパークラス。

int型のオブジェクト表現は NSNumber というラッパークラスがありました。
これでオブジェクト操作できますね。

NSNumber *num;
num = [NSNumber numberWithInt:9]; //オブジェクトに 9 を代入

int n = [num intValue]; //intとして値を取る方法
NSLog(@"n : %d", n); // n : 9 が出力される

2010年12月21日火曜日

NSLogでNSStringを表示 %@

NSStringをフォーマット出力する際はオブジェクトそのものを出力する %@ を利用する。
つい %c とするものかと思ったのですが。

NSString *str;
    str = [[NSString alloc] initWithFormat:@"%d/%d/%02d", 2010, 12, 21];
    NSLog(@"date format: %@", str); //NSStringをフォーマット出力する際は %@ を利用。オブジェクトそのものを出力
    //NSLog(str);

2010年12月13日月曜日

Objective-Cの変数のスコープ

他の言語でもそうですが、 { } で囲まれたブロックの内部で定義された変数はそのスコープ内でのみ有効です。
同名の変数が外部に存在する場合は見えなくなります。

#import 

int main (int argc, const char * argv[]) {
    int abc = 3;

    {   
        int abc = 2;
        NSLog(@"%d", abc); // 2
    }   
    NSLog(@"%d", abc); // 3
    return 0;
}

2010年12月6日月曜日

Objective-Cでの整数のデータ長

Macには32bitと64bitの環境が混在しており、以下の通りの長さになるそうです。
longを利用しなければ、動作的に問題なさそうですね。

32bit環境64bit環境
short1616
int3232
long3264

Objective-Cのステートメントの末尾には;(セミコロン)が必要

#import <Foundation/Foundation.h>

//マクロ定義
#define TEST 18 //プリプロセッサへの命令なので;(セミコロン)が必要ない。セミコロンを付けるとそれも展開される

int main (int argc, const char * argv[]) {
    double test = 99; //ステートメント

    NSLog(@"test : %d", test); //ステートメント
    NSLog(@"TEST : %d", TEST); //ステートメント

    return 0;
}

Objective-Cで割り算する際の注意点

割り算をする際は %% と % をエスケープする必要があります。

#import <Foundation/Foundation.h>

int main (int argc, const char * argv[]) {
    int num1 = 14;
    int num2 = 4;

    NSLog(@"num1 + num2 = %d", num1 + num2);
    NSLog(@"num1 - num2 = %d", num1 - num2);
    NSLog(@"num1 * num2 = %d", num1 * num2);
    NSLog(@"num1 / num2 = %d", num1 / num2);
    NSLog(@"num1 %% num2 = %d", num1 % num2);

    return 0;
}

2010年12月5日日曜日

Objective-Cで現れるNSの意味

NSLog や NSString のように、Cocoa環境のクラスや関数の名前は NS で始まります。

このNS は Mac OS X の前身である NeXTSTEP の略です。

@から始まる要素は、コンパイラへの指令(ディレクティブ)

@"hello" のように @ から始まる要素は、コンパイラへの指令(ディレクティブ)という意味で、「コンパイラ・ディレクティブ」と呼ばれています。

NSStringのインスタンスは @"hoge" で生成できる

Objective-C のクラスからそのオブジェクトであるインスタンスを生成するには、通常 alloc メソッドなどの専用メソッドを実行する必要があります。

しかし、文字列は頻繁に使用するので、次の形式でインスタンス生成を行う事が出来ます。

@"hoge"

ただし、この方式で生成できるのは「7ビットASCII文字」(半角英筋)のみです。
日本語はサポート外になります。

ターミナルでヘッダファイルを検索する

以下の手順で ヘッダファイルを検索する事ができます。

$ open -h NSString

オプション -h を除くと、通常の Finder から、ダブルクリックした際の挙動と同じにアプリケーションでファイルを開く事ができます。

$ open hoge.txt

※このコマンド自体知りませんでした・・・

Cocoa.hを覗いてみた

以下の3つのヘッダファイルが #import されていた
 
#import <Foundation/Foundation.h>
#import <AppKit/AppKit.h>
#import <CoreData/CoreData.h>


Cocoa.h 自体が GUI アプリケーションのフレームワークであることを考えると納得の漢字です。
  1. Foundation.h …… 基本機能
  2. AppKit.h        …… GUIを構築するフレームワーク
  3. CoreData.h    …… データ管理フレームワーク

objective-cのコメントの書き方

一般的な感じですね。

1行    …… //
複数行 …… /* */

コンパイル前の処理「プリプロセッサ」

#import のように # (シャープ)で始まる文はプロプロセッサに対する命令と言う意味で、「プリプロセッサ・ディレクティブ」などと呼びます。

自作ヘッダなどシステム標準以外のヘッダを読み込むには「<>」の代わりに「"」を利用します。

#import "myHeader.h"

ヘッダファイルのインクルード #import

#import でヘッダファイルを読み込みます。
#import は #include とは違って一回しかヘッダを読み込みません。