タグ

ブックマーク / qiita.com/hetima (2)

  • ARC で IMP を使う - Qiita

    IMP はこのように返り値が id 型の関数として定義されていまして、オブジェクト以外の値を返す IMP に対しても問答無用で retain してしまい、結果落ちるというわです。 適切にキャストしてやればよいのですが、ただのキャストではだめで __bridge を使って「retain するな」ということを明示しなければなりません。 NSInteger result=(NSInteger)(__bridge void*)imp(self, _cmd); このコードはめでたく落ちないんですけど、返り値が id 型より大きい double や NSRect なんかだとこういう風にキャストできない。 じゃあどうすればいいか。受け取った id の型をキャストするのではなく、関数定義そのものをキャストしてしまおうというのが今回のポイントです。

    ARC で IMP を使う - Qiita
  • NSDate の compare 結果を100倍分かりやすくする - Qiita

    NSDate の compare: は NSComparisonResult を返すのだが、NSOrderedAscending と NSOrderedDescending はどっちがどっちなのか直感的に分かりにくい。比較演算子ならそうでもないんだけど、Ascending と Descending という単語を解釈するのに時間がかかる。なので最初から別の言葉に置き換えてしまう。 #define WKR_IsEarlier NSOrderedAscending #define WKR_IsLater NSOrderedDescending #define WKR_L_IsMorePastThan_R NSOrderedAscending #define WKR_L_IsMoreFutureThan_R NSOrderedDescending NSDate* now=[NSDate date]

    NSDate の compare 結果を100倍分かりやすくする - Qiita
  • 1