mojavy.com

xcodeのiosエミュレータのコンソールログはsystem.logに吐かれる

July 25, 2012 at 08:30 PM | categories: ios |

ios

タイトルの通りです。

iosエミュレータで標準出力に書いたものはsystem.logに吐かれます。

ちなみに最近のxcodeのiosプロジェクトは以下のようなコマンドでシンタックスチェックができます。

$ clang -Wall -Wextra -Wno-unused-parameter -fsyntax-only  -miphoneos-version-min=4.3 -xobjective-c -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.1.sdk *.m

参考: http://sakito.jp/emacs/emacsobjectivec.html



redmineのメールを効率良くフィルタリングする

July 24, 2012 at 11:30 PM | categories: tips, redmine |

redmine

redmineからとぶメールのヘッダにはX-Redmine-Issue-AuthorとかX-Redmine-Issue-Assigneeとかついているのでフィルタが簡単にできます。

いままでgmailでフィルタリングしてたので気付かなかった。。

メールクライアントはgmailのウェブアプリで十分だと思ってましたが、メーラはデスクトップアプリのほうが便利ですね。



ワンライナーでウェブサーバを起動する方法

July 18, 2012 at 12:30 PM | categories: python, web, ruby |

ruby

とりあえずウェブサーバがたちあがりさえすればいいときは、pythonのSimpleHTTPServerを使うのが便利です。 起動したカレントディレクトリ以下のファイルをブラウズできるので、テスト用のスタティックなスタブデータを一時的に配置したいときとかにも使えます。最近の一般的なlinuxディストリビューションであればデフォルトではいってるpythonで使えると思います。

$ python -mSimpleHTTPServer 3333

デフォルトポートは8000ですが、引数で指定することもできます。
ちなみにrubyでもwebrickを使って同様のことができますが、こちら で紹介されているwebrickのワンライナーは長すぎて覚えられないのでいつもpythonを使ってます。

でもリクエストに応じたロジックを入れたい場合はrubyのsinatraの方が便利です。

$ ruby -rsinatra -e 'get("/"){sleep 3}'

ポートを変更する場合は以下のようにします

$ ruby -rsinatra -e 'set :port,3333; get("/"){sleep 3}'

参考



objective-cのメモリマネージメントについて

July 18, 2012 at 11:30 AM | categories: objective-c |

objective-c

現在のところ3つの方法がある

1. Gabage Collection

  • Objective-C 2.0から導入された。
  • ただし、iOSの実行環境には含まれない。
  • Max OS Xでなら使えるらしい。

2. Manual Reference Counting

  • retainは参照カウントを1あげる。releaseは1さげる
  • 参照カウントが0でdeallocするとすぐに削除される
  • NSMutableArrayのaddObjectやremoveObjectAtIndexなどはオブジェクトの参照カウントを増減させる。
  • 余分にreleaseしたりするとcrashする

3. Automatic Reference Counting (ARC)

  • システムが自動的に参照カウントをしてくれる。
  • 強い変数と弱い変数がある

強い変数

  • デフォルトでは、オブジェクトのポインタは強い変数。そのようなポインタにアサインした参照は自動的にretainされる。
  • 新しい参照をアサインする前に古い参照はreleaseされる
  • _ _strong キーワードをつかって明示的に強い変数を宣言できる。
  • プロパティはデフォルトではstrongではない
  • C++のshared_ptrのようなもの?

弱い変数

  • 循環参照している場合や、しても開放されるようにするときに使える。
  • 親が子の強い参照を持っており、子が親の弱い参照を持っている場合、retainのサイクルが形成されなくなるのでオブジェクトを開放できる。
  • _ _weakキーワードを使う。
  • iOS4ではサポートされていない
  • C++のweak_ptrのようなもの?

Non-ARCのコード

  • init, alloc, copy, new, mutableCopyをprefixにもつメソッドはそのオブジェクトの所有権を返す、というネーミングコンベンションに従っている場合は自動的にARCが適用される。
  • 名前のコンベンションとは関係なしに、明示的にオブジェクトの所有権を返すメソッドをコンパイラに伝える方法もある。

参考




objective-cのプロトコルとデリゲーションについてのメモ

July 17, 2012 at 06:30 PM | categories: objective-c |

objective-c

  • プロトコルとはクラス間で共有するメソッドのリスト。
  • javaでいうinterfaceのようなもの。
  • @optionalディレクティブ以降のメソッドは実装が任意。
  • @requiredディレクティブで必須。
  • プロトコルに必要なメソッドは直接そのクラスで実装してもいいし、継承元の親クラスで実装してもよい。
  • requiredがすべて実装されていなかった場合、コンパイラーはワーニングを出す。(エラーではない)
  • すべてのrequiredメソッドを実装したクラスはそのプロトコルにconform(もしくはadopt)したという。
  • そのオブジェクトがconformしているかどうかチェックするには、conformsToProtocolメソッドを使う。
  • そのオブジェクトがoptionalなメソッドを実装しているかどうかをチェックするには、respondsToSelectorを使う。
  • コンパイル時に型チェックが行われる。型宣言にを含めるとよい。
  • カテゴリもプロトコルにadoptできる。
  • プロトコルの名前はユニークでなければならない。
  • delegationとはプロトコルで定義されたメソッドを実装したクラスを定義すること。
  • informal protocolというものもあるが、これは単に実装がないカテゴリのこと。abstract protocolともいう。ドキュメンテーションやモジュラリティのために用いる。コンパイル時チェックはなし。プロトコルの@optionalディレクトリはObjective-C 2.0で追加されたので、こちらをつかえばよい。
  • eclipseでいうデリゲートは、Composite Objectとよばれる

myProtocol.h

#import <Foundation/Foundation.h>

@protocol myProtocol <NSObject>

- (void)f1;
- (void)f2: (id)obj0 withObject1:(id)obj1;

@end

myProtocolImpl.h

#import <UIKit/UIKit.h>
#import "myProtocol.h"

@interface myProtocolImpl : NSObject <myProtocol>

- (void)f1;
- (void)f2: (id)obj0 withObject1:(id)obj1;

@end

myProtocolImpl.m

#import "myProtocolImpl.h"

@implementation myProtocolImpl

- (void)f1
{
    NSLog(@"called f0");
}

- (void)f2: (id)obj0 withObject1:(id)obj1
{
    NSLog(@"called f2");
}

@end

参考




About Me

pic
mojavy

Recent posts






Categories



Badges