Objective-C勉強会@8月

Objective-C勉強会@東京 8月 – Objective-C勉強会@東京 | Doorkeeper に参加/発表してきたのでメモ


「メタプログラミングとCategory」 – @akuraru

Metaprogramming

メタプログラミング

  • ロジックを生成する高位ロジックのこと
  • マクロ等
  • クラスやメソッドを生成するロジックの事
  • Objective-Cには実行時に行うことができる
  • => カテゴリ

カテゴリ

  • コンパイル時に既存のクラスにメソッドを追加、上書きできる機能
  • ヘッダーファイルを読み込んで無くてもコンパイルできてしまう

よいところ

カテゴリの衝突

  • カテゴリ同士で上書きすると警告がでない
  • ネイティブオブジェクトのメソッドに対しては出る

カテゴリを用いていい場合

  • 複数クラスにメソッドを追加したい
  • 自然と思える場合

解決方法

  • 継承してカテゴリは使わない
  • Static Classを作ってカテゴリは使わない
  • prefixを付けたメソッドにする(ナイーブ…)

「CoreDataとMagicalRecord」 – @tikidunponpon

CoreDataとは?

  • O/Rマッピングフレームワーク
    • オブジェクトとデータベースのテーブルを結びつける
  • データ永続化
  • オブジェクトグラフの管理を提供
    • テーブル同士の関係(リレーション)をオブジェクトで管理する仕組み

CoreDataの特徴

  • 多機能
  • RDBMSとは異なる点

多機能

  • クラス数が多い
  • 機能が多い
  • 最低限知っておくべきもの
    • CoreDataのStack
    • CRUD操作

CRUD操作

  • Create(生成) – insertNew
  • Read(読み込み) – execute
  • Update(更新) – プロパティ更新
  • Delete(削除) – deleteObject

CoreData Stack

  • Managed Object Context
    • 作業スペース
    • マルチスレッドで扱うときは複数ある場合ある
    • ManagedObejctを作ってContextに入れる
    • Contextに入れただけでは保存はされてない
  • Persistent store coordinator
    • これは基本1つ
    • 複数のPersistent storeを扱う
  • Persistent store
    • 実際のデータベースファイルを扱うオブジェクト
  • Managed Object Model
    • テーブル構造をオブジェクトとして表示(マッピングしたもの)
    • Entity Descriptionの集合
  • Entity Description
    • 実際のそれぞれのモデル

MagicalRecord

  • ActiveRecord風に使えるLibrary
  • コード記述量が減る
  • ワンラインフェッチが楽
  • FetchRequestの拡張も可能
  • DEMO

Fetchだけなら、peymano/DVCoreDataFinders がMagicalRecordと似たメソッドを持ってる

導入手順

  • CocoaPods , git clone
    • 最新は2.2
  • AppDelegateでsetupを呼び出す
  • MR_defaultContext でContextを取ってくる
  • MR_createEntity は CurrentThread で作られる
  • Update は MR_createEntity で作ったオブジェクトに値を入れればいい
  • deleteはContextから消えてるだけなので、保存するまで永続化はされない


Devlop iOS Library – @azu_re

自分が発表してきたのは、
iOSのライブラリ開発、テスト、コードカバレッジ、ライセンス、CocoaPodsでの公開方法についての話です。

スライドは以下に置いてあります。

スライド中でも触れていますが、

NSDateをもっと便利に使うためのライブラリ NSDate-Escortを書いた | Web scratch
書いた内容を少し幅広く扱った感じになってるので、一緒に読むとより理解しやすいです。

iOSライブラリの公開する環境として、CocoaPods,Travis CI,Coveralls といったツールやサービス等が既に揃ってるので、
もっと気軽にライブラリを公開していけるといいと思います。