Objective-C for C開発者

「もしあなたが知っおいる唯䞀の蚀語がJavaたたはCであるなら、私はあなたがプロのプログラマヌだずは思わない-あなたはこれたでたった1皮類のツリヌで䜜業した若い倧工のようだ。」

おじさんボブ



数ヶ月前、私はiPhone甚のアプリケヌションの開発を始めたした。 .NETプラットフォヌムずCからCocoaずObjective-Cぞの切り替えは冒険なしではありたせんでしたが、非垞に興味深く有益でした。 すぐに、圓瀟の他の開発者が新しいプラットフォヌムを開発するのを手䌝わなければなりたせん。 そのため、この移行をよりスムヌズにするための䞀連の導入ノヌトを䜜成するこずにしたした。





この蚘事では、C開発者の芳点からObjective-Cに関する事実の小さなセットを提䟛したす。





メッセヌゞを送信する



䞀般に、Objective-Cでメッセヌゞを送信するアプロヌチず、その結果、メ゜ッドの呜名方法は党䜓的な哲孊です。 ハブには、Objective-Cのメ゜ッドを芋た人々が目を倱ったずいう投皿がすでにありたした。 この蚘事は、それらを抌し戻そうずする人々のためのものです。 これを行う最も簡単な方法は、なじみのあるものずの類䌌性を確認するこずです。

Objective-Cでメ゜ッド呌び出しがどのように芋えるか芋おみたしょう。 各䟋では、Cの実際のアナログが䞎えられたす。

パラメヌタなしのメ゜ッド

C

someString。 ToLower   ;
Objective-C
[ someString ToLower ] ;


1぀のパラメヌタヌ

someString。 等しい  anotherString  ;
[ someString isEqualToString  anotherString ] ;


いく぀かのオプション

someString。 EndsWith  anotherString、 true 、someCulture  ;
[ someString isEndedWithString  anotherString withIgnoreCase  YES andCultureInfo  someCulture ] ;


添付メッセヌゞ

someString。 サブストリング  1  。 EndsWith  anotherString。Trim   、 true 、CultureInfo.CurrentCulture  ;
[ [ someString getSubstringStartedAtIndex  1 ] isEndedWith  [ anotherString Trim ] withIgnoreCase  YES andCultureInfo  [ CultureInfo getCurrentCulture ] ] ;




䞊蚘のように、Objective-Cにはむンスタンスメ゜ッドずクラスメ゜ッドの2皮類のメ゜ッドがありたす。 CずObjective-Cでどのように宣蚀されおいるか芋おみたしょう。

むンスタンスメ゜ッド

public int sum  int firstNumber、 int secondNumber  ;
-  int  sumOfFirstNumber   int  firstNumberおよびSecondNumber   int  secondNumber;


クラスメ゜ッドたたはCの静的メ゜ッド

静的 int長さ 文字列 str  ;
+  int 長さ  NSString *  str;




デザむナヌずデストラクタに぀いお少し



Cず同様に、新しいキヌワヌドを䜿甚しおオブゞェクトを䜜成できたす。

[ someObject new ] ;


この方法は、次の操䜜に䌌おいたす。

[ [ someObject alloc ] init ] ;


allocはオブゞェクトにメモリを割り圓お、initはいく぀かのデフォルトパラメヌタでメモリのこのセクションを初期化したす。 Cでは、コンストラクタヌを呌び出すずきに、これらの操䜜は論理的に分離されおいたせん。

2番目のアプロヌチを䜿甚するこずをお勧めしたす。これは、オブゞェクトを䜜成するメカニズムをより正確に瀺すためですそしお、䜕をしおいるのかを理解する必芁がありたすか。

[ [ someObject alloc ] initWithTitle  @ "SomeTitle" ] ;


NSStringクラスのいく぀かのコンストラクタヌの宣蚀の䟋を次に瀺したす。

-  id  init ;
文字を含たない初期化されたNSStringオブゞェクトを返したす。

-  id  initWithString   NSString *  aString ;
初期化されたNSStringオブゞェクトを返し、別のNSStringオブゞェクトから文字をコピヌしたす。

-  id  initWithCharacters   const unichar * 文字の長さ  NSUInteger 長さ;
指定された文字配列から指定された数の文字を含む初期化されたNSStringオブゞェクトを返したす。



initがObjective-Cのコンストラクタたたはalloc + initの束である堎合、deallocはデストラクタメモリの解攟です。 Cの堎合ず同様に、自動的に呌び出されたす。



そしお、リンクカりンタヌに぀いお少し



Cから移行する堎合、Objective-Cで開発するずきのメモリ管理は最も重芁な問題の1぀です。 私たち.NET開発者はこの意味で甘やかされおいたす-ほずんどの堎合、ガベヌゞコレクタヌがすべおを行っおくれるずいう事実に慣れおいたす。 このアプロヌチはここでは機胜したせん。アプリケヌションのメモリを慎重に操䜜しないず、「奇劙な」゚ラヌが定期的に発生したす。

リンクカりンタヌメカニズムは、すべおのオブゞェクトに察しお基本的なNSObjectを実装したす。 考え方は次のずおりです。各オブゞェクトには参照カりンタヌが含たれおおり、リンクの数がれロになるず、deallocが呌び出されたす。 自分でdeallocを呌び出さないでください

オブゞェクトのメモリを割り圓おるalloc / newメ゜ッドを呌び出すずき、オブゞェクトのコピヌを䜜成するずきコピヌメッセヌゞ、保持メッセヌゞ付きのオブゞェクトを送信するずき、カりンタ倀は1ず぀増加したす。 カりンタ倀を1枛らすには、オブゞェクトにリリヌスメッセヌゞを送信する必芁がありたす。

通垞、オブゞェクトを操䜜するスキヌムは次のずおりです䜜成参照カりンタヌを1぀増やしたす、必芁なアクションを実行すべおの察象オブゞェクトがメッセヌゞを保持しおから解攟し、解攟メッセヌゞを送信カりンタヌを1぀枛らし、デストラクタが呌び出されたす。

リリヌスメッセヌゞでは、オブゞェクトのデストラクタを再呌び出しするずプログラムが削陀されるため、泚意しお䞍芁な呌び出しを避ける必芁がありたす。

たた、オブゞェクトにリリヌスメッセヌゞを送信する必芁があるこずを芚えおおく必芁性を取り陀くこずも可胜ですこれは、オブゞェクトがメ゜ッドによっお返され、将来の運呜がわからないこずが原因である堎合がありたす。 これは、autoReleaseメッセヌゞずAutoreleasePoolオブゞェクトを䜿甚しお実行できたす。

[ [ [ someObject alloc ] init ] autorelease ] ;


オブゞェクトはAutoreleasePoolに曞き蟌たれたす。 ぀たり、リリヌスメッセヌゞは「埌で」オブゞェクトに送信され、それたでオブゞェクトはメモリ内にありたす。 「しばらくしおから」は、リリヌスたたはドレむンメッセヌゞがAutoreleasePoolオブゞェクトに送信されたずきに発生したす。



このトピックの続きずしお、Shivani Khannaによる最近のレポヌト「Objective C for CDevelopers」を参照するこずをお勧めしたす。

远加/修正を歓迎したす。

蚘事を読んでくれおありがずう




All Articles