記述できるカテゴリたとえば,UIAlertViewやUIActionSheetのデリゲート処理の記述を面倒に感じている方は多いのではないでしょうか。書き出してみるとこれだけのことではあるのですが,それぞれ書く場所が違い,メソッドも増えるのでやはり煩雑さは否めません。記述できるようにしたカテゴリやサブクラスがオープンソースで数多く公開されています。いうカテゴリを使用すると,上記の手順が表示処理を実装これだけになります。表示処理自体もオブジェクトの生成や表示メソッドのコールをラップしてくれているので,下記のように1メソッドで済みます。}];また,UIImagePickerControllerを用いて画像選択UIを実装する際には,UIActionSheetで画像ソースをアルバムにするかカメラにするかを選択させてからUIImagePickerControllerを表示し,UIImagePickerControllerDelegateのデリゲートメソッドで画像選択後の処理を行う,というフローが一般的によく用いられます。この一連のフローを実装するとそこそこのステップ数になりますが,UIKitCategoryAdditionsを用いれば,1つのメソッドをコールするだけで済むようになります。}];......と,ここまでUIKitCategoryAdditionsを推しましたが,実はソース内部の実装を見るとあまり宜しくない点も見受けられます。後略このようにstatic変数にBlockをcopyして保持しており,直前でreleaseしているものの,最後に使用したBlockの参照はずっと残っていることになります。インスタンス変数に保持するか,使い終わった後にBlockを解放するかの修正を行って使用した方がベターです。インスタンス変数に保持するようにした場合,現状クラスメソッドとなっているものをインスタンスメソッドにする必要があり,せっかくのシンプルなAPIに手を入れることになりますので,筆者は後者の方法(使い終わった後にBlockを解放)でforkしました。forkしたリポジトリのURLは下記になります。https://github.com/shu223/UIKitCategoryAdditionsこのUIKitCategoryAdditionsだけでなく,Blockオブジェクトの保持はどのBlocks関連ライブラリにもついてまわるので,使用する際には「Blockをどのように保持しているか?」(⁠ちゃんとcopyしているか,必要なくなったら解放しているか)についてご注意ください。Blocksを使用したライブラリを選ぶ際の注意点がもう一点あります。Block内でそのBlockを保持するオブジェクト自身を強参照すると,循環参照になってしまいます。selfは__strong修飾子付きid型変数なので,Block内でselfを使用している場合は循環参照になっている可能性があります。そのような場合は,下記のように__weak修飾子を付けた変数に代入することで回避可能です。Blocksで記述できるようにしたもの,KVOのオブザーバの処理をBlocksで記述できるようにしたもの,NSTimer+Blocks等々,数多く便利なものが公開されているのですが,上記のようなBlocksの注意点を踏まえ現時点で最もお勧めできるのは,BlocksKitです。有名なOSSなので利用者も多く,更新やforkも比較的頻繁に行われているため信頼性は他の類似ライブラリより高いといえます。何よりもBlocksの応用で考え得る便利な拡張機能をだいたい備えており,その名の通りBlocksを使用したライブラリの集大成のようなOSSとなっています。日本語での解説記事もいくつかあるので本連載では解説は省略しますが,とても便利なライブラリなのでぜひお試しください。英単語の単数形/複数形変換をメソッド1つで行えるようにするNSStringのカテゴリiOSアプリを英語ローカライズする際,単数形/複数形の取り扱いはなかなかやっかいです。違いを始めとして,不可算名詞,person/peopleのようにイレギュラーなものもあります。*)singularizeString;このように非常にシンプルなメソッドで単数/複数変換を行えるようにしたカテゴリがActiveSupportInflectorです。ダウンロード先は下記になります(MITライセンス⁠)⁠。https://github.com/shu223/ActiveSupportInflector使用にあたってはNSString+ActiveSupportInflectorクラス以外に,ActiveSupportInflectorクラスとActiveSupportInflector.plistをプロジェクトに追加する必要があります。ちなみに,上記リンク先はforkした筆者のリポジトリになるのですが,修正点としては下記のようにNSString+ActiveSupportInflector.mを1行コメントアウトしてあります。"NSString+MSAdditions.h"このNSString+MSAdditions.hというファイルはリポジトリに存在していないのですが,そもそもこれに依存したコードになっていないので,コメントアウトすることで問題なくビルドできるようになります。このカテゴリによってどんな変換ができるようになるかは,リポジトリ内に付随しているテストケース用のプロパティリストファイルActiveSupportInflectorTest.plistを見ると一目瞭然ですので,使用を検討されている方はチラッとのぞいてみてください。以下に一部抜粋しておきます。"bases"),まとめUIImageに各種画像処理機能を持たせるNYXImagesKit,UIAlertViewやUIActionSheetのデリゲート処理をBlocksで記述できるようにするUIKitCategoryAdditions,NSStringに単数形/複数形変換機能を持たせるActiveSupportInflectorの3つのカテゴリを紹介しました。今回は記事の都合上3つしか紹介できませんでしたが,まだまだオープンソースの便利なカテゴリは数多く存在しますので,また別の回で紹介したいと思います。アプリ著者プロフィール堤修一(つつみしゅういち)1978年生まれ。京都大学工学部を卒業後,同大学院修了。その後,NTTデータにて音声認識技術の研究開発,キヤノンにて画像処理機能の設計に携わる。2010年より面白法人カヤックに入社。3年間ほぼiOSアプリ開発に専念し,フルスクラッチで開発しリリースしたアプリは30本以上。現在は,米国シリコンバレーのマウンテンビューにあるAppSocially社の一員として活躍中。2019」を開催しました。DAY1・DAY2の様子を注目セッションとともにお伝えします。LINEのエンジニア3名がイベントに先駆けて見どころを紹介します。コードの安全性・安定性を高める開発サイクル~テスト管理の効率を上げ,脆弱性診断を自動で行う~本連載では,連載「業務を改善する情報共有の仕掛け」を受けつつ,安全性・安定性を加えた開発サイクルについて考えていきます。若者世代から圧倒的な人気を誇るライブ配信&動画投稿コミュニティアプリ「MixChannel」(ミクチャ)の裏側(レコメンドシステムやサーバサイド開発など)について解説していきます。その他の連載CSS3アニメーションでつくるインターフェイス表現CSS3によるアニメーション表現を紹介していきます。その中でも,幅広い読者に応用してもらえるだろうインターフェイスを主なお題とします。MySQL道普請便り本連載では,MySQLを使ったアプリ開発・運用に関するノウハウをご紹介していきます。RecipeUbuntuの強力なデスクトップ機能を活用するための,いろいろなレシピをお届けします。JavaScriptセキュリティの基礎知識JavaScriptに関するセキュリティ上の問題はどこで発生し,どうすれば防ぐことができるのか?について解説していきます。〜システムをきちんと運用するための基礎知識システムは「作って終わり」ではなく,運用の中でさまざまな問題が発生します。問題の発生に備えて事前にどのような対応をしておくべきなのか,問題発生時に何をしなければならないのか,ポイントを解説していきます。きたみりゅうじの聞かせて珍プレーソフトウェア開発の現場で体験したトホホな失敗,思わずうなる珍プレーをきたみりゅうじ氏が四コママンガで紹介。Linuxのメンテナンスの傍ら,Linuxやオープンソースソフトと日々を過ごす著者が,その魅力とつきあい方を,エッセイ風味でお届けします。PRESS特別編集部員,さわやか笑顔のスーパーハカーはまちちゃんとネット大好き14歳わかばちゃんが,毎号,読者の皆さんから寄せられたおたよりを紹介します。皆さんの日頃の悩みにも答えちゃいますよ。]メールでのお知らせメールで次の案内をお送りしております。メールの配信を希望する方は,利用したい項目をチェックしてメールアドレスを入力し,[登録]ボタンをクリックしてください。UPDATES[ほぼ週間に1回]新刊メールマガジン[ほぼ週間に1回]電脳会議の各号案内[ほぼ1ヵ月半に1回]※変更する場合や停止する場合は,登録情報変更ページをご覧ください。※登録いただいたメールアドレスには,そのお知らせ以外,配信いたしません。Ltd.ページ内容の全部あるいは一部を無断で利用することを禁止します。個別にライセンスが設定されている記事等はそのライセンスに従います。