Objective-C学習編01-クラスの声明と実現
5602 ワード
Objective-Cは、アメリカ人のブレッド・確斯(Brad Cox)が1980年初めに発明したプログラム設計言語で、同時代のC++と同様に、Cにオブジェクト向けの特性を加えて拡充したものである.Objective-Cの最大の特徴はオブジェクト向けプログラミングOOP(Object Oriented Programming)をサポートすることであり、その主な特性はパッケージ、継承、多態である.
オブジェクト指向プログラミング言語である以上、クラス/オブジェクト、クラスメソッド/オブジェクトメソッド、メンバー変数などの概念もある.
文法の概要
1.クラス
クラスとは同じ特徴と行為(機能)を持つものの抽象であり、一種のデータ型に相当するが、このタイプをクラスタイプ(Class Type)と呼び、オブジェクトはこのタイプを用いて作成する変数であり、オブジェクトはクラスのインスタンス化である.
クラスを作成することは、自分で定義したデータ型に相当し、このデータ型を使用して作成された変数をオブジェクトと呼ぶ.
OCでは、クラスを2つのファイルで記述するのが一般的です.
1> .h:メンバー変数、メソッドを宣言するクラスの宣言ファイル.クラスの宣言には、キーワード@interfaceと@endが使用されます.
注意:hのメソッドは宣言にすぎず,メソッドを実現しない.すなわち,メソッド名,メソッドの戻り値タイプ,メソッドが受信するパラメータタイプを説明するだけで,メソッド内部のコードは記述されない.
2> .m:クラスの実装ファイルで、実装に用いる.hで宣言する方法.クラスの実装にはキーワード@implementationと@endが使用されます.
2.方法
方法はC言語の中の関数に相当するが、OCはもう関数と呼ばれず、方法と呼ばれている.
1>メソッドの宣言と実装は、+または-で始まる必要があります.+はクラスメソッド(静的メソッド)を表すプラス記号「+」で修飾されたメソッドがクラスメソッドに属し、このメソッドはこのクラス呼び出し(すなわちクラス名呼び出しを用いる) によってのみ使用できる.-オブジェクトメソッド(ダイナミックメソッド)を表すマイナス記号「-」で修飾されたメソッドはオブジェクトメソッドに属し、このメソッドは現在のクラスで作成されたオブジェクト呼び出し のみである.
3.メンバー変数
メンバー変数の一般的な役割ドメインは3つあります.
1>@publicグローバルアクセス可能
2>@protectedは、クラス内およびサブクラスでのみアクセスできます.
3>@privateはクラス内でのみアクセス可能
二関連クラスのコード解析
1.Person.h-クラスの宣言ファイル
a.@interfaceインタフェースの意味、Personはタイプ名、コロン:誰から受け継いだかを表し、NSObjectはOCのすべてのクラスのベースクラスであり、これらはクラスを作成した後、システムが自動的に生成し、手動でコードを書く必要はありません.
b.大かっこ{}内にこのクラスの特徴(つまりインスタンス変数:すなわちクラスのインスタンス(オブジェクト)が持つ属性)を書き、インスタンス変数は大かっこに書かなければならない
c.@publicインスタンス変数を@publicで修飾するとクラスの外部にアクセスできる.クラスの外部とは.h和.mファイル以外のファイルをクラスの外部と呼び、クラスの内部は.h和.mこのファイルの中
d.NSString *_name;//NSStringはOCの文字列クラスで、非基本データ型に属し、変数を定義するときに*を追加します.
NSInteger _age;//NSIntegerはOCの整数型で、基本データ型なので、インスタンス変数を定義するときは*を付けません.
NSString *_gender;//性別
OCのデータ型については、ブログを参照してください.http://www.cnblogs.com/Harbingwang/p/4995920.html
注意://OCのタイプ(つまり非基本データ型)は、変数を宣言するときに'*'を付ける必要があります
//C言語基本データ型にアスタリスクは不要*
//インスタンス変数の名前はすべて''はじめに
2. Person.m–クラスの実装ファイル
注意:もし私たちが方法を書いたら、ありません.mファイルで実現すると、mファイルに警告(Methoh definition for***not found)が表示されます.空の実装です.理由は.hに声明を書いたが、いなかった.mで を実現の1つのクラスの実現も書くしかない.mファイルには、クラスの宣言と実装が書かれている場合があります.mファイルは、ありませんので.hで宣言するので、このクラスは見えません.このクラスは現在のものです.mファイルのプライベートクラス ペアh和.mファイルには1つのクラスしか書けないわけではなく、複数のクラスを定義できますが、一般的には1つのクラスしか書けず、管理が便利です. 親が継承したメソッドが私たちのニーズを満たすことができない場合、親のメソッド を書き換えることができます.
5.NSLogはOCの出力文であり、NSLogを使用して注意しなければならないのは、出力された内容は必ず@""の間に書かなければならず、@は省略できない.OC印刷文字列:OCでは文字列は単純な文字列ではなく、NSString(文字列クラス)が作成するオブジェクトに属する文字列オブジェクトである.
%@は任意のタイプのオブジェクトのプレースホルダであり、印刷オブジェクトであれば%@でプレースホルダを使用します.
6.@interfaceと@endはセットで使われています.@implementationと@endもセットで使われています.
3オブジェクトの作成
mainにオブジェクトを作成します.作成する前に、Personというクラスのヘッダファイルをmainに導入し、ヘッダファイル#import“Person.h”を導入します.
1.クラスを使用してオブジェクトを作成するには1>.オブジェクトにメモリ領域を割り当てる2>.初期化
Person *p = [[Person alloc] init];
1>.[person alloc]スタック領域でメモリ領域を開き、メモリ領域の最初のアドレスを返します.
上で呼び出されたallocメソッドは、メモリが割り当てられたPersonオブジェクトpを返し、等号の左側にPersonタイプを指すポインタ変数pを使用してこのオブジェクトを受信します.pの左側の*番号に注意してください.すべてのOCオブジェクトはポインタ変数で受信.クラス名で変数を定義する場合は、クラス名の後ろに必ず*番号を付けてください.
2>.personオブジェクトの構築方法initを呼び出して初期化
2. オブジェクトのインスタンス変数に値を割り当てる
p->_name = @"HarbingWang";//名前に値を付ける
p->_age = 23;//加齢
p->_gender=@「男」;//性別に値をつける
オブジェクト呼び出し方法の使用:[]大かっこはOCのメソッド呼び出し子で、メソッド呼び出し者はカッコの左側に、メソッド名はカッコの右側に、中間にスペースを残します.
[p sayHello];//話し方を呼び出す
OCはメッセージ送受信メカニズムを採用しており、文[p sayHello]はオブジェクトpにsayHelloのメッセージを送信するように翻訳され、pは自分がこのメッセージを実行できるかどうかを検出し、sayHelloメソッドを呼び出すことができれば、エラーを報告することはできない(Crash)
オブジェクト指向プログラミング言語である以上、クラス/オブジェクト、クラスメソッド/オブジェクトメソッド、メンバー変数などの概念もある.
文法の概要
1.クラス
クラスとは同じ特徴と行為(機能)を持つものの抽象であり、一種のデータ型に相当するが、このタイプをクラスタイプ(Class Type)と呼び、オブジェクトはこのタイプを用いて作成する変数であり、オブジェクトはクラスのインスタンス化である.
クラスを作成することは、自分で定義したデータ型に相当し、このデータ型を使用して作成された変数をオブジェクトと呼ぶ.
OCでは、クラスを2つのファイルで記述するのが一般的です.
1> .h:メンバー変数、メソッドを宣言するクラスの宣言ファイル.クラスの宣言には、キーワード@interfaceと@endが使用されます.
注意:hのメソッドは宣言にすぎず,メソッドを実現しない.すなわち,メソッド名,メソッドの戻り値タイプ,メソッドが受信するパラメータタイプを説明するだけで,メソッド内部のコードは記述されない.
2> .m:クラスの実装ファイルで、実装に用いる.hで宣言する方法.クラスの実装にはキーワード@implementationと@endが使用されます.
2.方法
方法はC言語の中の関数に相当するが、OCはもう関数と呼ばれず、方法と呼ばれている.
1>メソッドの宣言と実装は、+または-で始まる必要があります.
3.メンバー変数
メンバー変数の一般的な役割ドメインは3つあります.
1>@publicグローバルアクセス可能
2>@protectedは、クラス内およびサブクラスでのみアクセスできます.
3>@privateはクラス内でのみアクセス可能
二関連クラスのコード解析
1.Person.h-クラスの宣言ファイル
#import <Foundation/Foundation.h>
@interface Person : NSObject {
//
@public
NSString *_name;//
NSInteger _age;//
NSString *_gender;//
}
// : , .
- (void)sayHello;
- (void)eat;
- (void)sleep;
@end
a.@interfaceインタフェースの意味、Personはタイプ名、コロン:誰から受け継いだかを表し、NSObjectはOCのすべてのクラスのベースクラスであり、これらはクラスを作成した後、システムが自動的に生成し、手動でコードを書く必要はありません.
b.大かっこ{}内にこのクラスの特徴(つまりインスタンス変数:すなわちクラスのインスタンス(オブジェクト)が持つ属性)を書き、インスタンス変数は大かっこに書かなければならない
c.@publicインスタンス変数を@publicで修飾するとクラスの外部にアクセスできる.クラスの外部とは.h和.mファイル以外のファイルをクラスの外部と呼び、クラスの内部は.h和.mこのファイルの中
d.NSString *_name;//NSStringはOCの文字列クラスで、非基本データ型に属し、変数を定義するときに*を追加します.
NSInteger _age;//NSIntegerはOCの整数型で、基本データ型なので、インスタンス変数を定義するときは*を付けません.
NSString *_gender;//性別
OCのデータ型については、ブログを参照してください.http://www.cnblogs.com/Harbingwang/p/4995920.html
注意://OCのタイプ(つまり非基本データ型)は、変数を宣言するときに'*'を付ける必要があります
//C言語基本データ型にアスタリスクは不要*
//インスタンス変数の名前はすべて''はじめに
2. Person.m–クラスの実装ファイル
#import "Person.h"
// implementation ,
@implementation Person
//
- (void)sayHello {
// , ,
NSLog(@" ! %@, %ld , %@", _name, _age, _gender);
}
//
- (void)eat {
NSLog(@" ");
}
//
- (void)sleep {
NSLog(@“ , ");
}
@end
注意:
-(id)init {
_name = @" ";
_age = 18;
_gender = @" ";
return self; // self ,self
}
5.NSLogはOCの出力文であり、NSLogを使用して注意しなければならないのは、出力された内容は必ず@""の間に書かなければならず、@は省略できない.OC印刷文字列:OCでは文字列は単純な文字列ではなく、NSString(文字列クラス)が作成するオブジェクトに属する文字列オブジェクトである.
%@は任意のタイプのオブジェクトのプレースホルダであり、印刷オブジェクトであれば%@でプレースホルダを使用します.
6.@interfaceと@endはセットで使われています.@implementationと@endもセットで使われています.
3オブジェクトの作成
mainにオブジェクトを作成します.作成する前に、Personというクラスのヘッダファイルをmainに導入し、ヘッダファイル#import“Person.h”を導入します.
1.クラスを使用してオブジェクトを作成するには1>.オブジェクトにメモリ領域を割り当てる2>.初期化
Person *p = [[Person alloc] init];
1>.[person alloc]スタック領域でメモリ領域を開き、メモリ領域の最初のアドレスを返します.
上で呼び出されたallocメソッドは、メモリが割り当てられたPersonオブジェクトpを返し、等号の左側にPersonタイプを指すポインタ変数pを使用してこのオブジェクトを受信します.pの左側の*番号に注意してください.すべてのOCオブジェクトはポインタ変数で受信.クラス名で変数を定義する場合は、クラス名の後ろに必ず*番号を付けてください.
2>.personオブジェクトの構築方法initを呼び出して初期化
2. オブジェクトのインスタンス変数に値を割り当てる
p->_name = @"HarbingWang";//名前に値を付ける
p->_age = 23;//加齢
p->_gender=@「男」;//性別に値をつける
オブジェクト呼び出し方法の使用:[]大かっこはOCのメソッド呼び出し子で、メソッド呼び出し者はカッコの左側に、メソッド名はカッコの右側に、中間にスペースを残します.
[p sayHello];//話し方を呼び出す
OCはメッセージ送受信メカニズムを採用しており、文[p sayHello]はオブジェクトpにsayHelloのメッセージを送信するように翻訳され、pは自分がこのメッセージを実行できるかどうかを検出し、sayHelloメソッドを呼び出すことができれば、エラーを報告することはできない(Crash)