タグ別アーカイブ: Objective-C

Objective-Cにおける反復処理

enumrateObjectsUsingBlockメソッド

block
配列の要素に適用する操作。blockの中が for(;;){ do_anything; } の do_anything に相当する。
obj
配列から取り出した要素。
idx
配列要素のインデックス。forループのカウンター値に相当する。

stop
停止フラグ。stopにYESを代入するとその時点で停止する。forループのbreak文に相当する。

Objective-CからSwiftのクラスが参照できない

課題

Objective-CからSwiftのクラスが参照できない。

Use of undeclared identifier 'xxx'

 

チェックポイント

ポイント 1

Objective-C(*.m, *.mm)において ProjectName-Swift.h をインポートしなければならない。

 

ポイント 2

Objective-Cから参照するSwiftで実装するクラスは NSObject の派生クラスでなければならない。

メソッドファミリー

メソッドファミリーとは

オーナーシップポリシー (ownership policy)
インスタンスの所有者がインスタンスオブジェクトの解放に責任を持つための取り決め。retain/releaseする責任がどちらにあるのかの取り決め。
メソッドファミリー (method family)

オーナーシップポリシーをコンパイラが明確に区別するための方法
  • init…, new… で始まるメソッドでインスタンスを生成したとき
  • copy…, mutableCopy… で始まるメソッドでインスタンスを複製したとき

返されるオブジェクトに対するオーナーシップ(所有権)が発生する。
続きを読む

Objective-Cのenumをswiftから参照する

一般的なObjective-Cでのenum定義とSwiftからの参照

Objective-C

Swift

列挙子名 GRADE に一致する接頭辞 GRADE + _ (アンダーバー) までが、Swiftから参照するときに削除される。

 

Trickyなenum列挙子の命名方法

列挙子名 GRADE に部分一致する接頭辞 GR + _ (アンダーバー) までが、Swiftから参照するときに削除される。

NSNull

NSDictionaryやNSArrayの要素としてnilを格納することはできない。
nilの代わりに[NSNull null]を格納する。

[NSNull null]はシングルトン。ただ一つのインスタンスを参照する。

[NSNull null] と nil の比較はできない。

 

比較の例

 

NSLogの出力の違い

@importを有効にする

Objective-CやC言語のなかで @import文 を有効にする方法。
以下の設定が無効(No)のときは、@importで該当するソース(header file)を参照できない。

Xcodeの "Enable Modules (C and Objective-C)" を有効(Yes)にする。

PROJECT ⇒ Build Settings ⇒ Apple LLVM x.x – Language – Modules ⇒ Enable Modules (C and Objective-C)

Objective-C ブロック内の強参照(循環参照)を回避する方法

強参照をブロックに渡す例

弱参照をブロックに渡す例