Skip to content

1.1 Objective C の基礎

tamotamago edited this page Apr 16, 2013 · 9 revisions

参考 : Objective-C プログラミング

object 生成

NSObject *obj = [[NSObject alloc] init];

method

[obj exeWithArg1:hoge arg2:fuga]

Objective C にはメッソドにラベルがある。

クラスの作成

MixiSampleClass.h, m を作成。

MixiSampleClass.h

#import <Foundation/Foundation.h>

// [1] 列挙型
typedef NS_ENUM(NSInteger, SampleType){
    SampleTypeHoge = 0,
    SampleTypeFuga,
    SampleTypePiyo
};

@interface MixiSampleClass : NSObject

@property (nonatomic, strong) NSString *name; //[2] property

-(id)initWithName:(NSString *)name sampleType:(SampleType)sampleType; //[3] instance method
+(NSString *) getStaticString; //[4] class method

@end

MixiSampleClass.m

#import "MixiSampleClass.h"

static NSString *const constString = @"const"; // [5]クラス定数
static NSString *staticString = @"static"; // [6]クラス変数

// [7] 無名カテゴリ
@interface MixiSampleClass()

@property (nonatomic, assign) BOOL isEnabled;
@property (nonatomic, assign) SampleType sampleType;

@end

@implementation MixiSampleClass

-(id)initWithName:(NSString *)name
       sampleType:(SampleType)sampleType
{
    self = [super init];
    if(self){
        _name = name; //[8] access iVar

        _isEnabled = YES;
        _sampleType = sampleType;
    }
    return self;
}

+ (NSString *)getStaticString
{
    return staticString;
}
@end

[1] 列挙型

定数に名前を付けて定義することができ、その集合に名前をつけることが出来ます

[2] property 宣言

  • name というインスタンス変数を持っている(自動的に生成)
  • nonatmic : 排他制御しない
  • strong : オーナーシップをもっている
  • -setName, -getName という setter, getter を自動的に生成。(getter=hoge, setter=fuga)と明示的に命名することも可能

[3] instance method

インスタンスメソッドには - をつけて宣言

[4] class method

クラスメソッドには + をつけて宣言

[5] 定数

const をつけて宣言

[6] クラス変数

static をつける

[7] 無名カテゴリ

無名カテゴリ内で宣言した property やメソッドは private 扱いになる。

[8] access to ivar

  • 自クラス内のインスタンス変数を参照、代入するときは _name = hoge, fuga = _name (self.name も可)
  • 他クラスのインスタンス変数の場合は obj.name

確認

  • MixiViewController の viewDidLoad で MixiSampleClass のインスタンスを生成してください。
  • NSLog() を使って、生成したオブジェクトのプロパティを確認してください。

カテゴリ

CustomizingExistingClasses

Objective-C では、あるクラスのメソッド群を別のモジュールとして宣言することが出来ます。その仕組みがカテゴリです。カテゴリは大規模クラスのメソッドを分割する他に既存のクラスへの拡張メソッドを作成することも可能です。

NSString クラスに拡張メソッドを実装してみましょう

category1

category2

NSString+HogeAddition.h

#import <Foundation/Foundation.h>

@interface NSString (HogeAddition)

-(NSString *)addHoge;

@end

NSString+HogeAddition.m

#import "NSString+HogeAddition.h"

@implementation NSString (HogeAddition)

-(NSString *)addHoge
{
    return [NSString stringWithFormat:@"%@hoge", self];
}

@end

確認

MixiSampleClass クラスのインスタンス変数 name に対して addHoge メッセージを送ってみましょう。

  1. 導入
  2. Objective C の基礎
  3. メモリ管理
  4. UIViewController1 - UIViewController のカスタマイズ
  5. UIViewController2 - ModalViewController
  6. UIViewController3 - ライフサイクル
  7. UIKit 1 - container, rotate-
  8. UINavigationController
  9. UITabController
  10. Custom Container View Controller
  11. Supporting Multiple Interface Orientations
  12. UIKit 2- UIView -
  13. UIView
  14. UIView のカスタマイズ
  15. UIView Animation
  16. UIKit 3 - table view -
  17. UITableView について
  18. UITableViewとNavigationController
  19. custom UITableViewCell の作成
  20. 4.4 UITableViewのその他のオプション、カスタマイズ
  21. UIKit 4 - images -
  22. UIImage (CoreGraphics)
  23. UIImageView
  24. Accets Library
  25. CoreImage
  26. UIKit 4 - text -
  27. UILabel
  28. UITextView
  29. KeybordNotification
  30. 非同期処理系
  31. NSURLConnection (json シリアライザ)
  32. Blocks
  33. GCD
  34. ローカルキャッシュ
  35. UserDefaults
  36. FileManager
  37. CoreData
  38. SQLite
  39. Instruments
  40. leak
  41. time profiler
  42. その他
  43. 単体テスト (GHUnit)
  44. 結合テスト (KIF)
  45. cocoaPods でライブラリ管理

edit sidebar

Clone this wiki locally