Objective-Cのクラスとプロトコルについて

クラスはオブジェクトの設計図にあたるもので、属性とメソッドで構成されています。

Objective-Cのクラスは以下のように宣言と実装が分かれています。

クラス

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
//クラスの宣言
@interface Hoge : NSObject

//プロパティ
@property (nonatomic, strong) NSString *str;

//メソッド定義
- (void)foo;

@end

//クラスの実装
@implementation Hoge {
  @private
    //インスタンス変数
    int *_number;
}

//メソッドの実装
-(void)foo
{
  //処理
}

@end

クラスからオブジェクトを生成して処理を実行

1
2
3
4
//Hogeクラスから hogeオブジェクトを生成する
Hoge *hoge [[Hoge alloc] init];
//メソッドの実行
[hoge foo];

クラスの継承

継承を使うと継承元の情報を引き継いで新しいクラスを作成することができます。

クラスを継承するには、ヘッダファイルに親クラスの指定を追加します。

1
2
3
4
5
6
7
8
9
10
11
12
13
//Hogeクラスを使用して Piyoクラスを作成
@interface Piyo : Hoge
//新たにメソッドを追加する
- (void)bar;
@end

//クラスの実装
@implementation Piyo
//メソッドの実装
-(void)bar
{
  //処理
}

継承したメソッドの実行

1
2
3
4
5
6
7
8
//Piyoクラスから piyoオブジェクトを生成する
Piyo *piyo = [[Piyo alloc] init];
//継承した strプロパティに値をセットする
piyo.str = @"test";
//継承したメソッドの実行
[piyo foo];
//Piyoクラス独自のメソッドを実行
[piyo bar];

メソッドのオーバーライド

1
2
3
4
5
6
7
8
9
10
11
12
13
@interface Piyo : Hoge

@end

@implementation Piyo
//親クラスのメソッドをオーバーライドする
- (void)foo
{
  //親クラスのメソッド呼び出し
  [super foo];
  //処理
}
@end

プロトコル

プロトコルはオブジェクトの振る舞いを表すメソッド群を宣言したものです。

プロトコルは以下のように「@protocol」指示子を使って宣言します。

1
2
3
4
5
//インターフェースの宣言
@protocol Hoge
//メソッドの定義
- (void)foo;
@end

プロトコルの適合

プロトコルで宣言されているメソッドはクラスが実装します。

ヘッダファイルにプロトコルの指定を追加します。プロトコルを使用してプロトコルで宣言されているメソッドをクラスに実装することを、プロトコルの適合と呼びます。

1
2
3
4
5
6
7
8
9
10
11
//プロトコルの適合
@interface Piyo : NSObject <Hoge>

@end

@implementation
//プロトコルで宣言されているメソッドを実装する
- (void)foo {
  //処理
}
@end

親クラスの指定の後に「<>」で囲んで、適合するプロトコルを指定します。プロトコルが複数ある場合は「,」で区切ります。

Piyoクラスは Hogeプロトコルに適合しているため、以下のように Hogeプロトコルで宣言されている fooメソッドを呼び出すことができます。

1
2
3
4
//Piyoクラスから piyoオブジェクトを生成する
Piyo *piyo [[Piyo alloc] init];
//Hogeプロトコルで宣言されているメソッドを呼び出す
[piyo foo];

Objective-Cのクラスとプロトコルについての解説は以上になります。

お薦めの参考書

Swiftポケットリファレンス
Swiftの基本的な使い方から、データ処理やネットワーク処理の応用まで、逆引き形式で調べられる良書です。サンプルコードも Webからダウンロード出来、とても便利です。内容としては中級者向けですが、手元にあれば安心の一冊です。

   このエントリーをはてなブックマークに追加

About

Masaki Hirokawa (@dolice_apps)

デザインエンジニア 廣川政樹の開発ブログ。Objective-Cや Javaなど iPhone/Androidアプリ開発に関する技術情報を掲載しています。

iPhone apps

  • リラックス・ヒーリング(無料)
  • 望みが叶う!引き寄せの法則アプリ(無料)
  • ミステリー - 怖い話や不思議な体験、都市伝説まとめ
  • 浮世絵壁紙 - 美しい日本画ギャラリー(無料)
  • 綺麗な壁紙HD iPhone 7/7 Plus/SE & iPod対応(無料)
  • クールな壁紙HD iPhone 7/7 Plus/SE & iPod対応(無料)

Android apps

  • 浮世絵壁紙 - 美しい日本画ギャラリー
  • 綺麗な高画質壁紙

Objective-C Classes

Tag Cloud

ActionScript(9) ActionScript3(7) Ad(4) Adfurikun(2) AdMob(9) Android(10) Animation(17) AppDelegate(3) ARC(1) ArrayList(1) AVAudioPlayer(4) AVAudioSession(1) AVFoundation(3) Banner(2) Bitmap(1) Camera(4) CGAffineTransform(4) CGBlendMode(2) CGContextRef(1) CGImageRef(1) Classes(44) CLLocationManager(1) ConnectivityManager(1) ContentResolver(1) CoreLocation(2) Delegate(3) Device(7) Display(1) DisplayMetrics(1) Download(101) Facebook(6) Foundation(72) Framework(2) Google Analytics(1) Handler(1) iAd(6) ImageView(1) In-AppPurchase(1) iOS(12) iOS 7(15) iOS 7.1(3) iOS 8(1) iPad(7) iPhone(21) iPhone 6(4) Java(7) JavaScript(2) LINE(4) Localize(1) Magazine(1) MediaStore(1) MFComposeViewController(1) Nend(1) NetworkInfo(1) NSArray(23) NSCalendar(3) NSData(2) NSDate(7) NSDateComponents(2) NSDateFormatter(2) NSDictionary(12) NSEnumerator(1) NSIndexSet(1) NSInteger(6) NSMutableArray(17) NSMutableDictionary(5) NSMutableOrderedSet(7) NSMutableString(4) NSMutableURLRequest(1) NSNotificationCenter(1) NSNumber(1) NSObject(1) NSOrderedSet(7) NSRange(2) NSSelectorFromString(1) NSSet(6) NSString(19) NSTimer(4) NSTimeZone(1) NSURL(7) NSURLConnection(1) NSURLRequest(2) NSUserDefaults(7) NSXMLParser(2) Objective-C(222) PHP(1) Products(14) QuartzCore(3) RSS(2) Runnable(1) Sample(51) Screensaver(9) SDK(2) ShareCompat(1) Social(10) StoreKit(1) Twitter(6) UIAccelerometer(3) UIActionSheet(1) UIActivityIndicator(1) UIActivityIndicatorView(3) UIActivityViewController(1) UIAlertView(5) UIApplication(7) UIButton(4) UIColor(3) UIDatePicker(5) UIDevice(6) UIDeviceOrientation(1) UIEvent(6) UIImage(15) UIImagePickerController(4) UIImageView(12) UIKit(58) UILabel(7) UINavigationBar(4) UINavigationItem(1) UIPasteboard(4) UIScreen(1) UIScrollBar(1) UIScrollView(1) UISlider(3) UIStoryboardSegue(3) UISwitch(1) UITabBar(3) UITableView(4) UITextField(2) UIView(11) UIViewAnimationTransition(1) UIViewController(4) UIWebView(5) WindowManager(1) Xcode(48) Xcode 5(8) Xcode 5.1(2)