Apa perbedaan antara metode kelas dan metode contoh?
Apakah metode instan pengakses (pengambil dan penyetel) sementara metode kelas hampir semuanya adalah segalanya?
objective-c
oop
methods
class-method
instance-methods
Berbakti
sumber
sumber
Semua detail teknis telah tercakup dengan baik dalam jawaban lainnya. Saya hanya ingin berbagi analogi sederhana yang menurut saya dengan baik menggambarkan perbedaan antara kelas dan contoh:
Sebuah kelas adalah seperti cetak biru dari sebuah rumah: Anda hanya memiliki satu cetak biru dan (biasanya) Anda tidak bisa melakukan itu banyak dengan cetak biru saja.
Sebuah contoh (atau objek ) adalah sebenarnya rumah yang dibangun berdasarkan cetak biru: Anda dapat membangun banyak rumah-rumah dari cetak biru yang sama. Anda kemudian dapat mengecat dinding dengan warna yang berbeda di masing-masing rumah, sama seperti Anda dapat secara independen mengubah properti setiap instance kelas tanpa mempengaruhi instance lainnya.
sumber
difference between class method and an instance method
;Seperti jawaban lain yang telah dikatakan, metode instance beroperasi pada objek dan memiliki akses ke variabel instansinya, sementara metode kelas beroperasi pada suatu kelas secara keseluruhan dan tidak memiliki akses ke variabel instance tertentu (kecuali jika Anda melewatkan instance sebagai parameter).
Contoh yang baik dari metode kelas adalah metode tipe-kontra, yang mengembalikan jumlah total instance dari kelas. Metode kelas dimulai dengan a
+
, sedangkan yang contoh dimulai dengan a-
. Sebagai contoh:main.m:
Output: Umur: 0 Jumlah orang: 2
Contoh lain adalah jika Anda memiliki metode yang Anda ingin agar pengguna dapat menelepon, kadang-kadang ada baiknya membuat metode kelas. Misalnya, jika Anda memiliki kelas bernama MathFunctions, Anda bisa melakukan ini:
Jadi, pengguna akan menelepon:
tanpa harus instantiate kelas!
Anda juga dapat menggunakan fungsi kelas untuk mengembalikan objek autoreleased, seperti NSArray
Itu mengambil objek, meletakkannya dalam array, dan mengembalikan versi array autoreleased yang tidak harus dikelola memori, bagus untuk array temperership dan yang tidak.
Saya harap Anda sekarang mengerti kapan dan / atau mengapa Anda harus menggunakan metode kelas !!
sumber
Metode instance berlaku untuk turunan kelas (yaitu objek) sedangkan metode kelas berlaku untuk kelas itu sendiri.
Dalam C # metode kelas ditandai statis. Metode dan properti yang tidak ditandai statis adalah metode instan.
sumber
Jawaban untuk pertanyaan Anda tidak spesifik untuk objektif-c, namun dalam berbagai bahasa, metode Kelas dapat disebut metode statis.
Perbedaan antara metode kelas dan metode instance adalah
Metode kelas
Metode instance
sumber
Saya pikir cara terbaik untuk memahami ini adalah dengan melihat
alloc
daninit
. Penjelasan inilah yang memungkinkan saya untuk memahami perbedaan.Metode Kelas
Metode kelas diterapkan ke kelas secara keseluruhan. Jika Anda memeriksa
alloc
metode, itu adalah metode kelas yang dilambangkan dengan+
sebelum deklarasi metode. Ini adalah metode kelas karena diterapkan ke kelas untuk membuat contoh spesifik dari kelas itu.Metode Instance
Anda menggunakan metode instance untuk memodifikasi instance spesifik dari kelas yang unik untuk instance itu, bukan ke kelas secara keseluruhan.
init
misalnya (dilambangkan dengan-
sebelum deklarasi metode), adalah metode instance karena Anda biasanya memodifikasi properti dari kelas itu setelah dibuatalloc
.Contoh
Anda memanggil metode kelas
alloc
untuk menghasilkan turunan dari kelas itu. Perhatikan bagaimana penerima pesan adalah kelas.Anda memodifikasi instance
NSString
dipanggilmyString
dengan menetapkan beberapa properti pada instance itu. Perhatikan bagaimana penerima pesan adalah instance (objek kelasNSString
).sumber
alloc
mengalokasikan memori yang cukup untuk objek,init
akan mengubah apa yang ada di alamat memori tersebut untuk menentukan keadaan objek. Kami tidak dapat memodifikasi objek kecuali ada ruang untuk memodifikasinya, jadi kami menggunakanalloc
kelas yang akan memutuskan memberi kami ruang itu.Metode kelas biasanya digunakan untuk membuat instance dari kelas itu
Misalnya,
[NSString stringWithFormat:@"SomeParameter"];
mengembalikan sebuahNSString
instance dengan parameter yang dikirim kepadanya. Oleh karena itu, karena ini adalah metode Kelas yang mengembalikan objek dari tipenya, itu juga disebut metode kenyamanan.sumber
Jadi jika saya memahaminya dengan benar.
Sebuah
class
metode tidak perlu Anda untuk mengalokasikan contoh yang objek untuk penggunaan / memprosesnya. Suatuclass
metode mandiri dan dapat beroperasi tanpa ketergantungan dari keadaan objek apa pun dari kelas itu. Suatuclass
metode diharapkan mengalokasikan memori untuk semua pekerjaannya sendiri dan membatalkan alokasi ketika selesai, karena tidak ada instance dari kelas yang akan dapat membebaskan memori yang dialokasikan dalam panggilan sebelumnya ke metode kelas.Suatu
instance
metode justru sebaliknya. Anda tidak dapat memanggilnya kecuali Anda mengalokasikan instance kelas itu. Seperti kelas normal yang memiliki konstruktor dan dapat memiliki destruktor (yang membersihkan semua memori yang dialokasikan).Dalam kebanyakan kemungkinan (kecuali jika Anda menulis pustaka yang dapat digunakan kembali, Anda seharusnya tidak memerlukan
class
variabel.sumber
Metode instance beroperasi pada instance kelas (yaitu, "objek"). Metode kelas dikaitkan dengan kelas (kebanyakan bahasa menggunakan kata kunci
static
untuk orang-orang ini).sumber
Ambil contoh gim di mana banyak mobil bertelur .. masing-masing milik kelas CCar. Ketika mobil dipakai, itu membuat panggilan ke
Jadi kelas CCar, dapat membuat daftar setiap CCar instantiated. Katakanlah pengguna menyelesaikan level, dan ingin menghapus semua mobil ... Anda bisa: 1- Pergi melalui daftar setiap CCar yang Anda buat secara manual, dan lakukan
whicheverCar.remove();
atau 2- Tambahkan metode removeAllCars ke CCar, yang akan melakukan itu untuk Anda saat Anda memanggil [CCar removeAllCars]. YaituallCars[n].remove();
Atau misalnya, Anda mengizinkan pengguna untuk menentukan ukuran font default untuk seluruh aplikasi, yang dimuat dan disimpan saat startup. Tanpa metode kelas, Anda mungkin harus melakukan sesuatu seperti
Dengan metode kelas, Anda bisa lolos
[FontHandler getDefaultFontSize]
.Adapun fungsi removeVowels Anda, Anda akan menemukan bahwa bahasa seperti C # sebenarnya memiliki keduanya dengan metode tertentu seperti toLower atau toUpper.
misalnya
myString.removeVowels()
danString.removeVowels(myString)
(dalam ObjC itu akan menjadi[String removeVowels:myString]
).Dalam hal ini instance cenderung memanggil metode kelas, sehingga keduanya tersedia. yaitu
pada dasarnya,
myString.toLower()
panggilan[String toLower:ownValue]
Tidak ada jawaban pasti, tetapi jika Anda merasa ingin mendorong metode kelas akan meningkatkan kode Anda, coba, dan ingatlah bahwa metode kelas hanya akan membiarkan Anda menggunakan metode / variabel kelas lainnya.
sumber
metode kelas
adalah metode yang dideklarasikan 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.
sumber
Di Objective-C semua metode dimulai dengan karakter "-" atau "+". Contoh:
Karakter "+" dan "-" menentukan apakah suatu metode adalah a
class method
atauinstance method
masing - masing.Perbedaannya akan jelas jika kita memanggil metode ini. Di sini metode dinyatakan dalam
MyClass
.instance method
membutuhkan turunan dari kelas:Di dalam
MyClass
metode lain dapat memanggil metode instanMyClass
menggunakanself
:Tapi,
class methods
harus dipanggil di kelas itu sendiri:Atau:
Ini tidak akan berfungsi:
sumber
METODE KELAS
Metode kelas biasanya membuat instance baru dari kelas atau mengambil beberapa properti global kelas. Metode kelas tidak beroperasi pada instance atau memiliki akses ke variabel instance.
METODE INSTANSI
Metode instance beroperasi pada instance kelas tertentu. Misalnya, metode pengakses yang Anda laksanakan adalah semua metode instan. Anda menggunakannya untuk mengatur atau mendapatkan variabel instan dari objek tertentu.
MEMOHON
Untuk memanggil metode instance, Anda mengirim pesan ke instance kelas.
Untuk memanggil metode kelas, Anda mengirim pesan ke kelas secara langsung.
Sumber: IOS - Objective-C - Metode Kelas Dan Metode Instance
sumber
Metode kelas tidak dapat mengubah atau mengetahui nilai variabel instan apa pun. Itu harus menjadi kriteria untuk mengetahui apakah metode instance dapat menjadi metode kelas.
sumber
Ingat juga, ide yang sama berlaku untuk variabel. Anda akan menemukan istilah-istilah seperti statis, anggota, instance, kelas dan sebagainya ketika berbicara tentang variabel yang sama seperti Anda untuk metode / fungsi.
Tampaknya istilah umum dalam komunitas Obj-C adalah ivar untuk variabel misalnya, tapi saya belum menjadi pria Obj-C.
sumber
Pembaruan untuk jawaban di atas, saya setuju metode instance menggunakan instance kelas, sedangkan metode kelas dapat digunakan hanya dengan nama kelas.
Tidak ada lagi perbedaan antara metode instance & metode kelas setelah penghitungan referensi otomatis muncul di Objective-C.
Untuk Contoh
[NS StringWithformat:..]
metode kelas &[[NSString alloc] initwihtformat:..]
metode contoh, keduanya sama setelah ARCsumber
Catatan: Ini hanya dalam format kode semu
Metode kelas
Hampir semua yang perlu dilakukan adalah selama waktu kompilasi . Itu tidak memerlukan input pengguna apa pun, atau perhitungannya tidak didasarkan pada instance. Segala sesuatu tentangnya didasarkan pada kelas / cetak biru —— yang unik yaitu Anda tidak memiliki banyak cetak biru untuk satu kelas. Bisakah Anda memiliki variasi berbeda selama waktu kompilasi? Tidak, oleh karena itu kelasnya unik dan jadi tidak peduli berapa kali Anda memanggil metode kelas, penunjuk yang menunjuknya akan sama.
Metode Instance
Sebaliknya metode instance terjadi selama runtime, karena hanya saat itulah Anda membuat instance dari sesuatu yang dapat bervariasi pada setiap instantiation.
Jika Anda berasal dari bahasa lain, metode statis sama dengan metode kelas.
Jika Anda berasal dari Swift, ketik metode sama dengan metode kelas.
sumber
Menambah jawaban di atas
Metode kelas akan bekerja di kelas, kita akan menggunakan ini untuk tujuan umum di mana seperti + stringWithFormat, ukuran kelas dan yang paling penting untuk init dll
Metode Instance akan bekerja pada instance kelas bukan pada kelas seperti kita memiliki dua orang dan kami ingin mengetahui keseimbangan masing-masing secara terpisah di sini kita perlu menggunakan metode instance. Karena itu tidak akan mengembalikan respons umum. misalnya suka menentukan jumlah NSSArray dll.
sumber