Objective-Cでオブジェクトを初期化する処理は、-init メソッドなどの初期化メソッドで実装されます。 よく見かけるのはこんな例ですね。

   1  - (id)init
   2  {
   3      [super init];
   4      /* initialization code */
   5      return self;
   6  }

しかしながら、基底クラスの初期化処理[super init]の最中に、 メモリアロケーションの失敗などによって正常に初期化が行われなかった場合に備えて、次のようなエラーハンドリングを行った方が良いでしょう。

   1  - (id)init
   2  {
   3      if(self = [super init]){
   4          /* initialization code */
   5      }
   6      return self;
   7  }

この辺の処理はXcodeなどが生成するひな形にも書かれていますね。

さて、ここからが本題ですが、上述の /* initialization code */ の中で初期化が失敗したときは、どうしたら良いでしょうか。 仕様的には、初期化に失敗したら nil を返す必要がありますが、 その際、途中までの段階で確保したリソースを解放する必要があるでしょう。 つまり、[super init]の中で確保されたであろうリソースを解放する必要があります。

   1  - (id)init
   2  {
   3      if(self = [super init]){
   4          /* initialization code */
   5          if(/* initialization failure */){
   6              /* release all resources */
   7              [super dealloc];
   8              return nil;
   9          }
  10      }
  11      return self;
  12  }

ということで、こんな感じに[super dealloc] を呼び出して nil を返します。 ここで、[super release] を呼び出すと、 参照カウンタが0になり、 [self dealloc] が呼び出されてしまうので注意が必要です。 [self dealloc]を呼び出すようにする場合は、上述の /* release all resources */ の中でリソースを解放せずに、[self dealloc] の中で解放するようにする必要があります。 しかし、失敗した初期化処理の中で中途半端に確保したリソースを、 正しく解放する為には、[self init] の内部で解放処理まで行った方が楽な気がします。 あるいは、以下の様に初期化済みのものだけ解放するようなコードを [self dealloc]に書いておくという手もあるかもしれません。

   1  #define RELEASE(x) if(x) [(x) release]
   2  
   3  - (void)dealloc
   4  {
   5      RELEASE(_something);
   6      [super dealloc];
   7  }

こんなコードを見ると、なんだかノスタルジーを感じます。

ちなみに関係ないですが、このブログシステムでは、 Objective-Cのソースコードを以下のような記法でSyntax highlightさせる事ができます。

   1  objective-c>>
   2  /* Objective-C code */
   3  <<objective-c

posted by Png genki on Mon 6 Oct 2008 at 22:09 with 4 comments

TeXのtabular内で改行したいときは \shortstack を使うと良い。

   1  \begin{tabular}{|c|・・・|c|}
   2    ・・・ & \shortstack{ 1行目 \\ 2行目 \\ 3行目} & ・・・
   3  \end{tabular}

See Also

posted by Png y_tsuda on Mon 6 Oct 2008 at 16:40 with 2 comments

用意するもの

絶対必要なもの

  • ツイストペアケーブル
  • LANコネクタ(RJ45)
  • かしめ工具

あれば良いと思うもの

  • ケーブルテスタ

LANコネクタは、ELECOMのLD-RJ45T10A、かしめ工具は、LD-KKTA2

Amazonで合わせて買うと、3000円いかないくらい。 かしめ工具のほうは、皮むきとケーブルカッターの役割も果たすので、個人的にはおすすめ。

作成手順

ケーブルの皮むき

皮をむくと、茶・緑・青・橙のケーブルのペアが出てくる。

こんな感じ。↓ IMG_1371.JPG

ケーブルを順番に並べる

左から順番に、茶・茶白・緑・青白・青・緑白・橙・橙白と並べる。

IMG_1374.JPG

かしめる

LANコネクタの爪のあるほうを上にして、順番に並べたケーブルを差し込む。(爪のあるほうから見て、左から茶・茶白・・・となるように)

そして、かしめ工具を使って、かしめる!!

IMG_1377.JPG

写真のような状態にして、ギュッとすると、カチッとした感触があるはず。

もう一方の端も同じようにする。 (もう一方の端がちょっと違うのがクロスケーブル)

完成

わーい \(^o^)/

posted by Png y_tsuda on Mon 6 Oct 2008 at 00:29 with 3 comments
Contents
Objective-Cのオブジェクト初期化処理について
表のセル内で改行する
LANケーブル作成 (ストレートケーブル編)
Comments
瀧内元気: MacOS版は以下にあります * [genki/ViMouse](https://githu... '23-1
KingofSmack: Here also good reads for this mobile applicatio... '14-5
Spencer: You don't have to re-compile it, this version w... '14-4
staiano: Any chance we can get a recompile for 10.9? '14-1
dsjf: https://gist.github.com/6bf1bf2c3cbb5eb6e7a7 これ... '13-1
Services from s21g
twpro(ツイプロ)
Twitterプロフィールを快適検索
地価2009
土地の値段を調べてみよう
MyRestaurant
自分だけのレストラン手帳
Formula
ブログに数式を埋め込める数式コミュニティ