私はObjective-Cの基本的な構文を理解しており、Cygwinをインストールして実験したいと思っています。しかし、私は2つのことがわかりません: 私は何をインポートし、 プリミティブ型の名前です。 誰かが私を助けることができますか?Objective-Cのインポート、Cygwinのプリミティブ型
答えて
継承できるオブジェクトはObject
です。これは、NeXTStepやCocoaのNSObject
と同程度の機能は提供していないことに注意してください。 Object
には参照カウントのようなものさえありません。 NSObject
という参照カウントのメモリ管理と同じ種類のものを取得するには、それを自分で実装する必要があります。
#import <objc/Object.h>
@interface MyObject : Object
{
int retainCount;
}
- (id) retain;
- (int) retainCount;
- (void) release;
@end
@implementation MyObject
+ (MyObject *) alloc
{
// In Cocoa, allocated objects have an implicit retain.
MyObject *anObject = [super alloc];
anObject->retainCount = 1;
return anObject;
}
- (void) release
{
retainCount--;
if (retainCount == 0)
[self free];
}
- (id) retain
{
retainCount++;
return self;
}
- (int) retainCount
{
return retainCount;
}
@end
int main (int argc, char *argv[])
{
MyObject *test = [[MyObject alloc] init];
[test retain];
[test release];
[test release];
// (test should be deallocated now)
return 0;
}
リンクする場合は、あなたが-lobjc
とリンクを確認する必要があり、これはObject
嘘(と思う)の場所を定義です。
他の大きなキャッチは、静的な文字列インスタンス、つまり@"like this"
と表示されるコード内の文字列です。
// Let's assume that we have a protocol <MyObject> that defines all the basic methods
// like retain, release etc. In this case, these should be no-ops because the static
// string is never deallocated. In Cocoa, there is a protocol <NSObject> which provides
// the same common methods.
@interface MyStaticStringClass : Object <MyObject>
{
char *str;
unsigned len;
}
- (const char *) cString;
@end
@implementation MyStaticStringClass
- (void) retain
{
return;
}
- (id) retain
{
return self;
}
- (int) retainCount
{
return INT_MAX;
}
- (const char *) cString
{
return str;
}
@end
int main (int argc, char *argv[])
{
id aString = @"Hello world!";
fprintf (stdout, "aString has the contents: %s\n", [aString cString]);
return 0;
}
コンパイル、あなたがフラグ-fconstant-string-class=MyStaticStringClass
を使用することができます:GNUランタイムを使用すると、文字列の静的インスタンスがある特定のIVARのレイアウトを、持っている必要があります。あなたは文字列クラスのために好きなメソッドを提供することができますが、それは2つだけのivarsを持っている必要があり、彼らは正しい順序でなければなりません。 Objective-Cスタイルの文字列を使用したくない場合は、静的文字列クラスを定義する必要はありません。静的文字列クラスを定義すると、動的な文字列クラス(つまり、実行時に割り当てられた文字列オブジェクト)の動作を複製できるので、どちらの場合でも使用できます。
コマンドラインユーティリティと基本的なアプリケーションについては、私はCocoaやGNUstepを使用せず、独自のクラスを定義します。これには多くの欠点がありますが、Objective-Cのオブジェクト抽象化と変成作用は、私がプログラミングしている他の言語よりも実装がずっと簡単です。
- 1. GCCとObjectiveCコードとCygwinのヘルプ
- 2. プリミティブ型のプロモーション
- 3. プリミティブ型
- 4. プリミティブ型のスカラマップ値型
- 5. イベントの非プリミティブ型
- 6. プリミティブ型のJavaクローンクラス
- 7. C#のプリミティブ型/ Nullable型の型名
- 8. 比較プリミティブ型
- 9. Hibernateプリミティブ型マッピング
- 10. C++のプリミティブ型のリスト
- 11. ScalaのAnyRefへのプリミティブ型
- 12. プリミティブ型の "value"のデフォルト値
- 13. Cassandraのプリミティブ型とオブジェクト型の保存
- 14. インポート* .pydファイルCygwin Python
- 15. コンパイル時のプリミティブ変数型
- 16. パフォーマンス:typedefとプリミティブ型のラッパークラス?
- 17. NSCode:プリミティブ型のエンコーダとデコーダ
- 18. のC#、反射とプリミティブ型
- 19. protobuf 3のプリミティブ型any
- 20. C++プリミティブ型の安全性
- 21. Objective-C setValue:cプリミティブ型のforKey
- 22. Scalaプリミティブ型の上限型境界
- 23. プリミティブ型は錆で
- 24. エンティティフレームワークのコードファーストとプリミティブ型のコレクション
- 25. クラスとプリミティブ型の間の接続?
- 26. のJavaのtoArray()メソッド:プリミティブ結果型
- 27. テンプレート内のプリミティブ型の識別
- 28. プリミティブ型とIN演算子
- 29. ClassLoaderでプリミティブ型を使用
- 30. mallocをプリミティブ型にキャスト