Jawaban:
+
adalah untuk metode kelas dan -
untuk metode contoh.
Misalnya
// Not actually Apple's code.
@interface NSArray : NSObject {
}
+ (NSArray *)array;
- (id)objectAtIndex:(NSUInteger)index;
@end
// somewhere else:
id myArray = [NSArray array]; // see how the message is sent to NSArray?
id obj = [myArray objectAtIndex:4]; // here the message is sent to myArray
// Btw, in production code one uses "NSArray *myArray" instead of only "id".
Ada pertanyaan lain yang berurusan dengan perbedaan antara metode kelas dan contoh .
@classmethod
dan @method
atau lebih, juga. Kenapa begitu singkat ...?
(+) untuk metode kelas dan (-) misalnya metode,
(+) Metode kelas: -
Apakah metode yang dinyatakan sebagai statis. Metode ini dapat dipanggil tanpa membuat instance kelas. Metode kelas hanya dapat beroperasi pada anggota kelas dan bukan pada anggota contoh karena metode kelas tidak mengetahui anggota contoh. Metode instance kelas juga tidak bisa dipanggil dari dalam metode kelas kecuali mereka dipanggil pada instance kelas itu.
(-) Metode instance: -
Di sisi lain memerlukan instance kelas untuk ada sebelum mereka dapat dipanggil, jadi instance kelas perlu dibuat dengan menggunakan kata kunci baru. Metode instance beroperasi pada instance kelas tertentu. Metode instance tidak dinyatakan sebagai statis.
Bagaimana cara membuatnya?
@interface CustomClass : NSObject
+ (void)classMethod;
- (void)instanceMethod;
@end
Cara Penggunaan?
[CustomClass classMethod];
CustomClass *classObject = [[CustomClass alloc] init];
[classObject instanceMethod];
+ metode adalah metode kelas - yaitu, metode yang tidak memiliki akses ke properti instance. Digunakan untuk metode seperti mengalokasikan atau metode pembantu untuk kelas yang tidak memerlukan akses ke variabel instan
- Metode adalah metode instance - berhubungan dengan satu instance objek. Biasanya digunakan untuk sebagian besar metode di kelas.
Lihat Spesifikasi Bahasa untuk lebih detail.
self
, melainkan kelas. Mereka tidak terkait dengan sebuah instance, dan metode pencarian tidak melalui instance, tetapi melalui kelas. Namun, Anda bisa melakukannya+exchangeIVarOf: (MYObject*)a with: (MYObject*)b { MYObject* x = a->ivar; a->ivar = b->ivar; b->ivar = x; }
Penjelasan definitif ini dari Apple ada di sini, di bawah bagian 'Metode dan Perpesanan':
Secara singkat:
(metode dapat dipanggil tanpa turunan dari kelas yang sedang dipakai). Jadi Anda menyebutnya seperti ini:
[className classMethod];
Anda harus membuat instance objek terlebih dahulu, lalu Anda dapat memanggil metode pada objek). Anda dapat secara manual instantiate objek seperti ini:
SomeClass* myInstance = [[SomeClass alloc] init];
(ini pada dasarnya mengalokasikan ruang memori untuk objek kemudian menginisialisasi objek di ruang itu - penyederhanaan yang berlebihan tetapi cara yang baik untuk memikirkannya. Anda dapat mengalokasikan dan init objek secara terpisah tetapi tidak pernah melakukan ini - ini dapat menyebabkan masalah buruk terkait dengan pointer dan manajemen memori)
Kemudian panggil metode instance:
[myInstance instanceMethod]
Cara alternatif untuk mendapatkan instance objek di Objective C adalah seperti ini:
NSNumber *myNumber = [NSNumber numberWithInt:123];
yang memanggil metode kelas 'numberWithInt' dari kelas NSNumber, yang merupakan metode 'pabrik' (yaitu metode yang memberi Anda 'contoh dibuat siap' dari suatu objek).
Objective C juga memungkinkan pembuatan instance objek tertentu secara langsung menggunakan sintaks khusus, seperti dalam kasus string seperti ini:
NSString * myStringInstance = @ "abc";