19

この質問は、ユーザーがiOSの質問に誤ったタグを付けた場合でも、ここで頻繁に表示されます。では、Xcode、Objective-C、Cocoaの違いは何ですか?

4

3 に答える 3

35

Objective-Cはプログラミング言語です。これは、有効なObjective-Cプログラムがどのように見えるか、およびそれらが何を意味するかについての単なる説明であると言えます。Objective-Cで記述されたソースコードリストがある場合、リストを機能させるにはインタプリタまたはコンパイラが必要です。Objective-Cのような言語は通常コンパイルされるので、ほとんどの人はコンパイラー(LLVMのような)を使用します。Objective-Cは、iOSおよびOS X向けの開発にほぼ独占的に使用されていますが、他の用途もあります。たとえば、Linux用のObjective-Cを作成する人もいます。

テキストエディタを使用してソースを記述し、コンパイラを使用してそれらを実際のプログラムに変換することができますが、最新のテクノロジでは、処理がはるかに多いため、作業を容易にする別のプログラムがあります。これらは統合開発環境またはIDEと呼ばれます。IDEは、ソースを編集し、コンパイルし、結果のプログラムをデバッグし、ドキュメントを読み、その他多くのことを行うための便利な方法を提供します。XcodeはそのようなIDEの1つです。ここで重要なのは、Xcodeはソース自体をコンパイルせず、スタンドアロンコンパイラ(LLVM)を呼び出すだけであるということです。また、Objective-Cアプリの開発に使用できるIDEはXcodeだけではありません。たとえば、AppCodeがあります。

iOSまたはOSXアプリを毎回最初から作成するには、非常に時間がかかります。そのため、Appleは開発者に優れたライブラリのセットを提供しています。ライブラリは、Appleによって作成された膨大な量のソースコードであり、このソースコードは、アプリに共通するほとんどのことを処理します。これらのライブラリはCocoaと呼ばれます。

さて、クラスを拡張する方法がわからない場合は、おそらくObjective-Cについて話していることになります。XcodeやCocoaとは何の関係もありません。VimをIDEとして、GCCをコンパイラとして使用してLinux用のGNUstepコードを作成するのは非常にうまくいくでしょう。一方、不思議な設定が原因でXcodeビルドプロセスが失敗した場合、またはXcodeで静的ライブラリをビルドしようとしている場合、それは明らかにXcodeの問題です。また、NSObject機能またはNSFileManagerクラスの使用方法がわからない場合は、Cocoaです。(ただし、IDEとしてAppCodeまたはTextMateを使用できるため、Xcode関連である必要はありません!)


もともと私のブログで利用可能です。タグを付け直したり、違いを説明したりするときは、ブログ投稿またはこの質問に自由にリンクしてください。

于 2012-09-20T09:36:25.937 に答える
8

Xcodeは、開発者がiOSやOS X用のソフトウェアを作成するために使用する統合開発環境(IDE)(アプリケーション)です。これには、エディター、ビルドシステム(目的のターゲットを生成するために何をビルドするかを決定する)、およびかなりの他のいくつかのもの。

Objective-Cは、開発者がそのようなソフトウェアを作成する主要な言語です。開発者は、純粋なCでその一部を作成したり、C ++を使用したり、Objective-C(Objective-C ++を生成)と組み合わせたり、プログラムの一部またはすべてを別の言語で作成したりできます。 MacRuby、Java(j2objcを使用)、C#(MonoTouchを使用)などの完全な言語。

Xcodeには、Objective-C、C、およびその他のいくつかの言語で記述されたコードを実行可能コードに変換するClangコンパイラが含まれています。ほとんどのエラーメッセージはClangから送信され、Xcodeは、検索のインデックス作成、構文の強調表示、Objective-Cコードの名前の補完をClangに大きく依存しています。

CocoaとCocoaTouchはアプリケーションフレームワークです。それぞれが、次のような多くの個別のフレームワーク(blahblah.frameworkという名前のフォルダーに格納されているライブラリ)のスイートです。

  • Foundation(両方):NSString、NSURL、NSFileManagerなどを含む一般的なオブジェクト指向ユーティリティ。
    • Core Foundation(両方):ほとんど同じですが、主にObjective-CではなくCベースのAPIを使用している点で異なります
  • アプリケーションキット(Mac):アプリケーションとウィンドウフレームワーク
  • UIKit(iOS):アプリケーションとウィンドウフレームワーク
  • コアグラフィックス(両方):描画
  • Core Animation(両方):スプライト管理とアニメーションフレームワーク

(そして、特にMacの場合、それらがどこから来たのか、さらに多くの)

それで:

  • CocoaまたはCocoaTouch以外のフレームワークを使用することもできますが、アプリケーションがシステムと通信したり、イベントを受信したり、描画したりするためには、ある程度のCocoa /CocoaTouchコードが必要です。ターゲットのMacやiOSには、さまざまなレベルの品質で、関連するラッパーが含まれます。
  • Objective-C以外の言語を使用することもできますが、CocoaとCocoa TouchのほとんどはObjective-Cの独自の構文機能(特にセレクター)用に設計されているため、構文が非常に厄介です。
  • Xcode以外にエディターを使用でき、Xcode以外のビルドシステム(makeなど)を使用することもできますが、AppleのApp Storeは、アプリが特定の方法でビルドされることを期待しています(特にコード署名に関して)。 App Store、その他のビルドシステムは、Xcodeが行うことを複製する必要があります。そうしないと、ユーザーが拒否されるリスクがあります。
于 2012-09-21T00:27:30.697 に答える
1

明らかな間違いは、Xcodeを他のすべてのものと区別できないことです。Xcodeは、プログラミングに使用しているツールです。コードの編集やコードの実行などに使用します。ツールに問題がある場合(たとえば、ウィンドウにコードが正しく表示されない場合や、描画に問題がある場合)インターフェイスなど)、これはXcodeの問題です。

コードが機能しない理由がわからない場合は、Objective-Cの問題またはCocoaの問題が発生している可能性があります。しかし、あなたは必ずしもどちらかを知ることはできません。

  • 問題の根本が言語のしくみがわからないことである場合(たとえば、アスタリスクの意味がわからない、宣言がインスタンス化されていない、nilへのメッセージがわからないなど)、Objective-Cの問題です。エラーが発生しますが、何もしないでください)。

  • デリゲートアーキテクチャやViewControllerの動作を理解していない場合、これはCocoaの問題です。

しかし、人々が質問をする方法についての私の経験は、あなたがこれらのどれを知らないのかを知らないかもしれないということです。私はあなたを個人的に意味するのではなく、私たち全員を意味します。これにより、自分が知らないことが正確に何であるかがわからないため、適切に質問を投げかけることが難しくなる可能性があります。問題を修正し、次のことに進みます)。

于 2012-09-21T00:38:49.547 に答える