タグ

studyとObjective-Cに関するraimon49のブックマーク (94)

  • 実行ループとdispatch_sourceの話。 - なるようになるかも

    いまやiOSのネットワーク処理といえばAFNetworkingな感じです。 しかし古いストリーミングAPIを使った経験があれば、ブロックベースのAPIでどうやってネットワーク通信を行っているのか疑問に思うはずです。なぜかというと、 GCDは実行ループを持てない からです。 そもそも実行ループとは何なのでしょう。 実行ループとは NSRunLoop Class Referenceより The NSRunLoop class declares the programmatic interface to objects that manage input sources. An NSRunLoop object processes input for sources such as mouse and keyboard events from the window system, NSPort

    実行ループとdispatch_sourceの話。 - なるようになるかも
  • Objective-Cの列挙の話。 - なるようになるかも

    Objective-C - NSArrayでfor(; ;)とかfor-inを使うのをやめて、enumerateObjectsUsingBlock:を使う - Qiita とか Objective-Cのいろいろな反復処理 - koogawa blog とかで列挙の話を見たので。 最も高速な列挙の方法 最初に結論を書いておくと、Objective-Cにおいて最も高速な列挙の方法は、Objective-Cを投げ捨ててC言語で記述することです。 NSArrayやNSDictionaryは ランタイム関数の呼び出しがボトルネック になります。 文字列を列挙するだけならNSStringのNSArrayよりも、char*の配列を扱ったほうが圧倒的に早いです。 NSEnumerator Objective-C 1.0から存在するプロトコルで、基的な列挙方法です。 objectEnumeratorで列挙

    Objective-Cの列挙の話。 - なるようになるかも
    raimon49
    raimon49 2014/03/13
    >NSFastEnumerationに準拠したコレクションに対するfor文とfor in文とで行われる処理は完全に別物。前者は圧倒的に遅いので、indexが欲しいという理由でfor in文をfor文に書き換えるべきではない。
  • Objective-C Programming Guide for Open Source Software

    2014/02/01 @ GREE

    Objective-C Programming Guide for Open Source Software
    raimon49
    raimon49 2014/02/27
    自前ライブラリとしてキャッシュ管理クラスを作った場合を例に解説。良い@interfaceまとめのところ凄くためになった。
  • Objective-Cが好きになるTips & Hackを勝手に補足 - yashiganiの英傑になるまで死ねない日記

    TLで見かけたこのスライド,いいところをついていてちょっとObjective-Cをやったことのある人が,もっと興味を持つきっかけを作るにはすごく良いスライドだと思った. Objective-C が好きになる Tips & Hack from Taketo Sano けど,内容を見た感じ初学者を対象としているわりに,ここで取り上げられているTipsやHackの負の側面に対するフォローが無い. 一応「やるかやらないかはあなた次第」とあるが,なぜというところが抜けているので初学者には判断できないと思う. 特に紹介されている例はあまり行儀の良い方針では無いように感じたので,これを初学者がそっくりそのまま真似をするのはあまりよろしくない. 反響も結構あるようで気になったので,勝手にこのTipsやHackの負の側面(行儀の良くない面)について補足をしておく. カテゴリメソッドの命名について このスライ

    Objective-Cが好きになるTips & Hackを勝手に補足 - yashiganiの英傑になるまで死ねない日記
    raimon49
    raimon49 2014/02/27
    Effectiveフォローエントリだ
  • クラス拡張とカテゴリの違いの話。 - なるようになるかも

    常々「クラス拡張をカテゴリってゆーな」って思ってるんだけど、「無名カテゴリ」自体は公式の呼称なんだよね。 [Objective-C] クラス拡張と無名カテゴリ - Qiita Objective-Cのクラス・カテゴリ・クラス拡張の整理 - $ cat /var/log/shin クラス拡張は、無名のカテゴリに似ています。が、別物です。一番の違いは、インスタンス変数を宣言できることと、宣言したメソッドはクラス体の(=カテゴリ無しの)@implementationで実装しなければならない点です。 クラス拡張とカテゴリの一番の違いは、「クラス拡張はクラス実装と共にランタイムにロードされることが保証される」ことだと思います。 文脈として、もともとobj-c 2.0以前にはクラス拡張がなく、またメソッドのプロトタイプ宣言が必須だったこともあり、「外部に公開したくないメソッド宣言はプライベートなカテ

    クラス拡張とカテゴリの違いの話。 - なるようになるかも
    raimon49
    raimon49 2014/02/22
    クラスエクステンションとカテゴリの違い。前者は静的解決のためインスタンス変数が宣言できる、後者は実行時に動的解決されるため同じ事ができない。
  • [iOS] 弱参照を扱えるコレクション NSHashTable と NSMapTable | アドカレ2013 : SP #8 | DevelopersIO

    この記事の内容は、ARC を有効にしていることを前提としています。 NSHashTable と NSMapTable コレクションと参照カウント オブジェクトに対してアクセスしやすくしたい等の理由で、NSMutableDictionary 等のコレクションに他のオブジェクトがオーナーシップを持っているオブジェクトの参照を格納しておきたいケースがたまにあります。こういった場合、オーナーシップを持っているオブジェクトが対象のオブジェクトを解放したと同時にコレクションからも参照を削除するべきなのですが、削除処理の実装を忘れてしまったり処理が煩雑になったりしてしまいがちです。 NSArray, NSSet, NSDictionary 等のコレクションは、オブジェクトが追加されるタイミングでそのオブジェクトの参照カウントをインクリメント(retain)しています。逆に、オブジェクトが削除される、もし

    [iOS] 弱参照を扱えるコレクション NSHashTable と NSMapTable | アドカレ2013 : SP #8 | DevelopersIO
    raimon49
    raimon49 2014/01/31
    NSMutableSetに近いNSHashTableと、NSMutableDictionaryに近いNSMapTable、ただし直接の継承関係は存在しない。retainルールと同一性評価のルールが指定できる。
  • メモリ管理・レイアウトの観点からみた UIViewController の view の扱い - jarinosuke blog

    self.view iOS 開発において、UIViewController の view の振る舞いは一番理解しておきたい点の一つです。 今回はその view に対して、メモリ管理とレイアウトの2つの視点を交えてアプローチを行い、 UIViewController の subclass を作成する上で、 UIViewController の各メソッドにどんな処理を書くべきか、そして何を書くべきでないか を説明出来ればなと思っています。 iOS 6 以降からを対象として考えていますので、 iOS 5 以前は取り扱いません。 self.view の振る舞い 扱いを学ぶには、まず対象の振る舞いを把握する事からです。 ライフサイクルとレイアウトサイクルの2点から簡単に復習します。 self.view のライフサイクル UIViewController の view がどのようなタイミングで生成され

    raimon49
    raimon49 2014/01/31
    レイアウト設定はself.viewプロパティのframeに全てが反映された後に呼ばれる:viewDidLayoutSubviewsで行い、:viewDidLoadではアクション設定。subviewの初期化はgetterで行うのもナルホド。
  • CGGeometry 啓蒙活動 - jarinosuke blog

    コードを用いてのレイアウト処理 iOS 6 から Auto Layout が導入され、レイアウトに関するコードを書く機会が ずいぶんと減ってきていると思いつつもなかなか減らない今日この頃。 最後の砦となるのはやはり以下の2メソッドでしょう。 //UIView - (void)layoutSubviews; //UIViewController - (void)viewDidLayoutSubviews; 上記2メソッド内でコードを用いて様々なレイアウトを行うわけですが、 今回はその中でのコーディング作法として CGGeometry をもっと使って読みやすくできるよ! という事を知って欲しくて書きました。 CGGeometry CGGeometry というと聞き慣れないですが、CGRect や CGPoint, CGSize などの構造体と、それを取り巻くマクロ関数を含めた総称です。 CGG

    CGGeometry 啓蒙活動 - jarinosuke blog
    raimon49
    raimon49 2014/01/24
    NSStringFromCGRect以外知らなかった
  • 下位互換コード隠蔽のストイシズム

    サンプルコード: https://github.com/taketo1024/iOS6CompatibilizerDemoRead less

    下位互換コード隠蔽のストイシズム
    raimon49
    raimon49 2014/01/16
    class_addMethod()でバージョン互換 実装されてない時だけ追加される
  • はてなインターンのサンプルコードを読んでの感想 - griffin-stewieのブログ

    はてなさんが はてなインターンで利用したiOSアプリ等のサンプルコードを公開しました - Hatena Developer Blog という素敵なサンプルコードを公開してくれたので、好き勝手に感想を書いてみたいと思う。来は Web アプリ側も動かしたかったんだけど、ウマく環境が作れなかったのでアプリはコードを読んだだけで動かしてはないです。あと、細かい検証とかしてないので勘違いとかしていると思うので指摘してください。 参考になった真似したい NSError と UIAlertView の使い方 NSError の内容ベースでエラーアラートを出すのは理にかなっていると思った。OS 側が返す NSError は期待する値が入っていない不親切な場合があるので、オリジナルの NSError から一度適切な値を持った NSError を再生成して返すクラスを介したらいいのかもしれない。 すっきりし

    はてなインターンのサンプルコードを読んでの感想 - griffin-stewieのブログ
  • Method Swizzling をうまく使っている実用例 - Qiita

    Method Swizzlingは、既存のメソッドの実装を、自前の実装に差し替えるための手法です。 ・・・ということを知ってはいても、どういうときに使うと便利なのかイマイチわかってなかったので、Method Swizzlingをうまく使った実用例を2つほど探してきました。 実用例その1:既存ソースコードに手を入れずに機能追加 xib ファイルのローカライズを IB 上でできるようにする AutoNibL10n 通常、xibで作成したUIをローカライズする場合、 xibファイルを言語ごとに用意する アウトレットを定義してプログラム側からローカライズした文言をセットする といった面倒な作業が必要でしたが、AutoNibL10n を使用すると、xibファイルを IB から直接多言語対応できるようになります。 たとえば、RootViewController.xibというファイルがあり、その中のUI

    Method Swizzling をうまく使っている実用例 - Qiita
    raimon49
    raimon49 2013/12/24
    Method Swizzling + KVOでrefreshControlプロパティを監視して差し替え
  • Objective-C のコードレビューチェックリスト - Qiita

    はじめに 稿は Juri Pakaste 氏による Cocoa review checklist (commit fff5703)の翻訳です。他人の Objective-C のコードをレビューするとき注意する点、また普段のコーディングで心がけるべき点についてまとめられています。 なお、原文のタイトルは Cocoa review checklist となっていますが、内容が Cocoa に限らない範囲のトピックをカバーしているため、稿のタイトルは「Objective-C の〜」としました。 誤訳の指摘や例の補足を歓迎します。 コードの見た目とコード以外の問題 不要な #import や @class 宣言を消す #import をソートする .m ファイルの中では、対応する .h ファイルの #import を最初の行に書く。空行をはさんで、ソートされた他の #import を書く。 X

    Objective-C のコードレビューチェックリスト - Qiita
    raimon49
    raimon49 2013/12/03
    nonnull属性, objc_requires_super属性
  • NSProxy を使って UIWebView のイベントハンドリングをフックする

    こんにちは。開発担当の福井です。 突然ですが、みなさん NSProxy をご存じでしょうか? NSProxy は Foundation の中で唯一 NSObject を継承しないクラスです(NSProxy のサブクラスを除く)。 また、その実装はほとんどありません。 今回はその NSProxy を使って view に対するメソッド呼び出しをフックしてみようというお話です。 NSProxy の使い方 名前からも推測できるように、NSProxy は Proxy パターンを実現するためのクラスです。 メッセージの呼び出しが動的に解決される Objective-C において Proxy オブジェクトを実現するのは実に簡単です。 NSProxy は、ただ自身に送られたメッセージを、そのまま別のオブジェクトに受け流すことで Proxy としての機能を実現します。 Proxy オブジェクトを作ってみる

    NSProxy を使って UIWebView のイベントハンドリングをフックする
    raimon49
    raimon49 2013/11/20
    NSProxyでproxyパターン。NSObjectを継承しない唯一のクラスであるため、initメソッドもsuperには存在しない。自分で実装が必要。
  • JSONにNSNullが入ってきたとき

    多くのiOSアプリはサーバーとの通信が必要で、やりとりされるデータのフォーマットにはJSONが採用されることが多いと思います。 iOS 5からは標準ライブラリにNSJSONSerializationが導入され、特に理由がなければJSONのエンコード/デコードにはこれを利用します。 NSJSONSerializationが扱うオブジェクトは以下の5種類のオブジェクトです。 NSString NSNumber NSArray NSDictionary NSNull そこで心配になるのが、予期しないところにNSNullが入ってきて”unrecognized selector sent to instance.“となってしまうことです。 NSNullではなくてnilが入っていてほしいと考える人は多いようですが、そもそもNSArrayやNSDictonaryはnilを含むことはできず、 そのような状

    raimon49
    raimon49 2013/11/18
    (object == [NSNull null]) 「NSNullはそもそもsingletonなのでisEqual:やisKindOfClass:で比較する必要はない」
  • Cocoa: Unicode 正規化と照合

    Cocoa: NSString の 1文字を取得するCocoa: NSString の文字数とバイト数を求めるCocoa: NSString を char 型の配列に変換するCocoa: Unicode 正規化と照合 NSString には Unicode 正規化のためのメソッドが用意されている。「正規合成」(NFC: Normalize Function Composite)、「互換合成」(NFKC: Normalize Function Compativle Composite)、 「正規分解」(NFD: Normalize Function Decomposite)、「互換分解」(NFKD: Normalize Function Compativle Decomposite)の説明は以前の記事で書いたので、テストケースを流用する。 #import <Foundation/Founda

    Cocoa: Unicode 正規化と照合
  • iOSで使う正規表現の注意すべき落とし穴 | DX.univ

    iOSアプリ開発担当の菅原です。 今日はみんな大好き正規表現[...]iOSアプリ開発担当の菅原です。 今日はみんな大好き正規表現についてのお話です。 iOSにおける正規表現の基礎は NSRegularExpression iOSで使う正規表現 をご覧ください。 正規表現が正常に動作しない問題 それはFalconの開発中に発生しました。 Falconでは正規表現を使って文字列の置換やチェックを行なっています。チェックする対象とチェックワードが動的に決まる箇所があるのですが、チェックワードに不正な文字列が入ると正規表現が正常に動作しない問題にあたりました。 例えば以下の様なコードで動的に決定していると不具合が生じる可能性があります。 NSRegularExpression *regexp = [NSRegularExpression regularExpressionWithPattern:

    raimon49
    raimon49 2013/10/10
    “+ (NSString *)escapedPatternForString:(NSString *)string”がNSRegularExpressionに存在
  • Cocoaの日々: NSSecureCoding - セキュアなプロセス間通信への小さな布石

    NSSecureCoding という聞きなれないプロトコルが iOS6/OSX10.8から導入された。ここでいうCodingとはオブジェクトの永続化のプロコトル NSCodingのそれを指している。つまり NSSecureCoding はセキュアな NSCodingのこと。 NSSecureCodingの定義はクラスメソッドが1つあるだけ。 + (BOOL)supportsSecureCoding; 使い方の前に何故この新しいプロコトルが導入されたかというと、現状のNSCodingだと不正なオブジェクトのロードを防げないから。 例えば -initWithCoder: の標準的な実装はこうなる。 id obj = [decoder decodeObjectForKey:@"myKey"]; if (![obj isKindOfClass:[MyClass class]]) {...fail.

    raimon49
    raimon49 2013/10/09
    セキュアなシリアライズ
  • コレクションのコピー

    『はじめてのiPhoneプログラミング』の文中で、『NSMutableCopyingのコピーは浅いコピーなので~』の説明が足りない気がしたので調べてみました。 オブジェクトのコピーとしては『浅いコピーと深いコピー』として『詳解 Objective-C 2.0』に解説があるのですが、辞書の場合についてもう少し知りたくて検索した所『Collections Programming Topics』というリファレンスがありましたので、『Copying Collections』の項を訳してみます。 ●コレクションのコピー オブジェクトのコピーには浅いコピー(Shallow copy)と深いコピー(Deep copy)の二種類があります。 通常のコピーは浅いコピーで、新しく生成したコレクションの所有権は元のオブジェクトと共有しています。 深いコピーは元から新しいオブジェクトを生成し、新しいコレクション

    raimon49
    raimon49 2013/10/04
    本当のコレクションdeep copyを実現したければアイテムを全て NSCodingに準拠させた上でNSKeyedUnarchiverでアーカイブしてアンアーカイブさせる。NSCopying + initWithArray:copyItems:でYESを指定の場合は1レベル層。
  • http://blog.f60k.com/drawrect_setneedsdisplay_layer/

    http://blog.f60k.com/drawrect_setneedsdisplay_layer/
    raimon49
    raimon49 2013/10/04
    UIViewControllerから見たsubviewsの描画フロー
  • http://blog.f60k.com/uiview_drawrect_setneedsdisplay/

    http://blog.f60k.com/uiview_drawrect_setneedsdisplay/
    raimon49
    raimon49 2013/10/04
    ビュー再描画がマークされるルールについて。