7 days of WordPress plugins, themes & templates - for free!* Unlimited asset downloads! Start 7-Day Free Trial
Advertisement
  1. Code
  2. iOS SDK

Menjelajahi Kerangka Dasar

Read Time: 13 mins
This post is part of a series called Learn iOS SDK Development From Scratch.
Exploring the iOS SDK
First Steps with UIKit

Indonesian (Bahasa Indonesia) translation by Sap (you can also view the original English article)

Kerangka Foundation adalah roti dan mentega di toolbox dari pengembang iOS. Ini menyediakan kelas root NSObject dan sejumlah besar blok bangunan fundamental untuk pengembangan iOS, dari kelas untuk angka dan string, hingga array dan kamus. Kerangka Foundation mungkin tampak agak membosankan pada awalnya, tetapi itu memanfaatkan banyak kekuatan dan sangat diperlukan saat mengembangkan aplikasi iOS.


Sebuah Kata Tentang Yayasan Inti

Dalam artikel sebelumnya, saya secara singkat menyebutkan Core Foundation dan hubungannya dengan Foundation. Meskipun kita tidak akan secara eksplisit menggunakan kerangka Core Foundation di sisa seri ini, itu ide yang baik untuk menjadi akrab dengannya dan untuk mengetahui bagaimana hal itu berbeda dari kerangka Foundation, yang akan Anda gunakan secara ekstensif.

Sementara kerangka Foundation diimplementasikan dalam Objective-C, kerangka Core Foundation didasarkan pada bahasa C. Meskipun ada perbedaan ini, kerangka Core Foundation tidak menerapkan model objek terbatas. Model objek ini memungkinkan definisi koleksi jenis buram yang sering disebut sebagai objek—terlepas dari fakta bahwa mereka, secara tegas, bukan objek.

Tujuan utama dari kedua kerangka kerja ini serupa, memungkinkan pembagian data dan kode antara berbagai pustaka dan kerangka kerja. Core Foundation juga termasuk dukungan untuk internasionalisasi. Komponen kunci dari dukungan ini disediakan melalui tipe opak CFString, yang secara efisien mengelola array karakter Unicode.

Seperti yang saya sebutkan sebelumnya, jembatan bebas-bebas secara harfiah menjembatani kesenjangan antara kedua kerangka kerja dengan memungkinkan substitusi objek Cocoa untuk objek Core Foundation dalam parameter fungsi dan sebaliknya.

Penting untuk dicatat bahwa Automatic Reference Counting (ARC) tidak mengelola "objek" Core Foundation, yang berarti Anda bertanggung jawab untuk mengelola memori ketika bekerja dengan "objek" Core Foundation. Ada artikel bagus dari Mike Ash tentang Penghitungan Referensi Otomatis dan bagaimana menggunakan ARC dengan Core Foundation dan bridging bebas pulsa.

Kunjungi Perpustakaan Pengembang Mac untuk daftar lengkap dari jenis buram yang termasuk dalam kerangka Core Foundation.


Latihan, Latihan, Latihan

Mempelajari keterampilan baru paling baik dilakukan melalui praktik sehingga membuat proyek baru di Xcode dan pilih templat proyek Command Line Tool seperti yang kita lakukan sebelumnya dalam seri ini. Template Command Line Tool dapat ditemukan di kategori Application di bagian OS X. Klik Next untuk melanjutkan.

Beri nama Foundation proyek baru dan masukkan nama organisasi dan identifier perusahaan. Untuk proyek ini, adalah kunci untuk mengatur jenis proyek ke Foundation. Beri tahu Xcode tempat Anda ingin menyimpan proyek dan tekan Create.

Uji jalan

Tempat bermain kita untuk sisa artikel ini akan menjadi main.m dan jendela konsol Xcode. Buka main.m dengan memilihnya di Project Navigator di sidebar kiri dan pastikan bahwa jendela konsol terlihat dengan mengklik tombol tengah pada kontrol View di toolbar Xcode.

Klik tombol Run di kiri atas untuk membangun dan menjalankan skema saat ini. Jika semua berjalan lancar, Anda harus melihat Hello, World! muncul di jendela konsol di bagian bawah.


Kerangka Dasar

Kerangka Foundation lebih dari sekedar kumpulan kelas untuk bekerja dengan angka, string, dan koleksi (array, kamus, dan set). Ini juga mendefinisikan puluhan protokol, fungsi, tipe data, dan konstanta.

Di sisa artikel ini, saya terutama akan fokus pada kelas-kelas yang paling sering Anda gunakan ketika mengembangkan aplikasi iOS. Namun, saya juga akan secara singkat berbicara tentang tiga protokol kunci yang didefinisikan oleh kerangka Foundation, NSObject, NSCoding, dan NSCopying.

File Header

Seperti yang Anda ketahui, file header kelas mendefinisikan antarmuka. Apakah itu berarti Anda harus mengimpor file header dari setiap kelas Foundation yang Anda rencanakan untuk digunakan? Jawabannya ya dan tidak.

Memang diperlukan untuk mengimpor file header dari suatu kelas sebelum Anda dapat menggunakannya. Anda melakukannya dengan menambahkan pernyataan impor seperti yang kita lihat sebelumnya dalam seri ini. Namun, kerangka Yayasan menyediakan cara mudah untuk memfasilitasi proses ini. Satu-satunya file yang perlu Anda impor adalah Foundation.h seperti yang diperlihatkan dalam cuplikan kode berikut.

Di belakang layar, kerangka kerja Foundation mengimpor semua file header yang diperlukan untuk memberikan Anda akses ke setiap kelas, protokol, fungsi, tipe data, dan konstanta kerangka kerja Foundation.

Mengimpor

Ketika Anda membuat proyek baru di Xcode dan Anda mengatur jenis proyek ke Foundation, Xcode akan:

  • hubungkan proyek dengan kerangka Foundation
  • tambahkan pernyataan impor di atas ke main.m
  • tambahkan pernyataan impor di atas ke file header dikompilasi proyek (*.pch)

Buka main.m untuk memverifikasi ini dan memperluas folder kerangka kerja di Project Navigator dengan mengklik segitiga kecil di sebelah kiri. Saya akan meninjau kembali file header terkompilasi dan tujuannya ketika kita melihat kerangka UIKit.

Protokol

Beberapa bahasa, seperti Perl, Python, dan C++, menyediakan dukungan untuk multiple inheritance, yang berarti kelas dapat diturunkan—menjadi subkelas—lebih dari satu kelas.

Meskipun Objective-C tidak memberikan dukungan untuk multiple inheritance, ia mendukung multiple inheritance melalui spesifikasi dalam bentuk protokol. Apa artinya ini? Alih-alih mewarisi dari kelas, protokol mendefinisikan daftar metode yang diterapkan kelas jika mereka sesuai dengan protokol.

Protokol dapat memiliki metode wajib dan opsional. Jika kelas tidak mengimplementasikan semua metode protokol yang diperlukan, kompiler akan melemparkan kesalahan.

Manfaat protokol banyak ragamnya. Ketika kelas adopts atau conforms to protokol, kelas diharapkan untuk mengimplementasikan metode (diperlukan) yang dideklarasikan dalam protokol.

Protokol Objective-C sangat mirip dengan antarmuka di Java. Ini berarti bahwa protokol dapat digunakan untuk menyatakan antarmuka ke suatu objek tanpa mengungkapkan kelas objek.

Warisan berganda memiliki manfaatnya, tetapi yang pasti memiliki kelemahannya. Keuntungan dari protokol adalah bahwa kelas yang tidak terkait masih dapat berbagi perilaku yang sama melalui penggunaan protokol.

NSObject

Selain kelas root NSObject, framework Foundation juga mendefinisikan protokol NSObject. Objek yang sesuai dengan protokol NSObject dapat ditanyakan tentang kelas dan superclass mereka, dapat dibandingkan dengan objek lain, dan menanggapi self seperti yang kita lihat dalam artikel tentang Objective-C. Ini hanya sebagian kecil dari perilaku yang ditambahkan ke objek yang sesuai dengan protokol NSObject.

NSCoding

Objek yang sesuai dengan protokol NSCoding dapat dikodekan dan didekodekan. Ini diperlukan untuk objek yang perlu diarsipkan atau didistribusikan. Obyek arsip terjadi ketika objek atau objek grafik disimpan ke disk, misalnya.

NSCopying

Protokol NSCopying hanya menyatakan satu metode, copyWithZone:. Jika kelas mendukung objek penyalinan, kelas harus sesuai dengan protokol NSCopying. Menyalin objek dilakukan dengan mengirimkan pesan copy atau copyWithZone:.


NSObject

Kelas NSObject adalah kelas akar dari sebagian besar hierarki kelas Objective-C. Apakah Anda ingat bahwa kita memulai instance dari kelas Book sebelumnya dalam seri ini? Kita mengirim kelas Book pesan alloc dan kita mengirim objek yang dihasilkan pesan init. Kedua metode dideklarasikan di kelas NSObject.

Dengan mewarisi dari kelas akar NSObject, objek tahu bagaimana berperilaku sebagai objek Objective-C dan bagaimana antarmuka dengan runtime Objective-C. Seharusnya tidak mengejutkan bahwa NSObject sesuai dengan protokol NSObject yang dilihat sebelumnya.

Hapus pernyataan NSLog di main.m dan tempel cuplikan kode berikut di tempatnya.

Kita mulai dengan membuat instance dari NSObject dan menyimpan referensi ke dalam variabel myFirstObject. Di baris kedua, kita nama kelas objek baru ke konsol. Metode class, mengembalikan instance NSString, objek string, yang menjadi alasan kita menggunakan penentu format %@ dalam pernyataan NSLog.

Selanjutnya, kita meminta myFirstObject untuk superclass dan mengakhiri dengan memverifikasi bahwa myFirstObject sesuai dengan protokol NSObject. Apakah Anda bingung dengan @protocol(NSObject)? Ini tidak lebih dari referensi ke protokol NSObject.

Klik Run dan periksa output di jendela konsol. Apakah Anda terkejut dengan hasilnya? Karena NSObject adalah kelas root, ia tidak memiliki superclass.


NSNumber

Kelas NSNumber adalah kelas utilitas yang mengelola salah satu jenis data numerik dasar. Ini adalah subkelas dari kelas NSValue, yang menyediakan penutup berorientasi objek untuk jenis skalar serta pointer, struktur, dan objek id. Kelas NSNumber mendefinisikan metode untuk mengambil nilai menyimpan, untuk membandingkan nilai-nilai, dan juga untuk mengambil sebuah string representasi dari nilai tersimpan.

Perlu diingat bahwa nilai yang diambil dari instance NSNumber perlu konsisten dengan nilai yang disimpan di dalamnya. Kelas NSNumber akan mencoba untuk secara dinamis mengkonversi nilai yang disimpan ke tipe yang diminta, tetapi tidak perlu dikatakan bahwa ada batasan yang melekat pada tipe data yang NSNumber dapat kelola.

Mari saya ilustrasikan ini dengan sebuah contoh. Tambahkan potongan kode berikut ke main.m.

Kita mulai dengan membuat instance NSNumber baru dengan memberikan nilai double ke numberWithDouble:. Selanjutnya, kita mengambil nilai yang tersimpan menggunakan tiga metode NSNumber yang berbeda. Hasilnya tidak mencerminkan nilai yang disimpan di myNumber karena alasan yang jelas.

Pelajarannya sederhana, konsisten ketika menggunakan NSNumber dengan melacak jenis yang disimpan dalam instance NSNumber.


NSString

Instance dari kelas NSString mengelola array karakter unichar yang membentuk string teks. Perbedaan halus tetapi penting dengan string C biasa, yang mengelola karakter char, adalah bahwa karakter unichar adalah karakter multibyte.

Seperti namanya, karakter unichar sangat cocok untuk menangani karakter Unicode. Karena penerapan ini, kelas NSString memberikan dukungan luar-dalam-kotak untuk internasionalisasi.

Saya ingin menekankan bahwa string yang dikelola oleh instance NSString tidak dapat diubah. Ini berarti bahwa setelah string dibuat, string tidak dapat dimodifikasi. Pengembang yang berasal dari bahasa lain, seperti PHP, Ruby, atau JavaScript, mungkin bingung oleh perilaku ini.

Kerangka Foundation juga mendefinisikan subkelas yang dapat berubah dari NSString, NSMutableString, yang dapat dimodifikasi setelah dibuat.

Ada berbagai cara untuk membuat objek string. Cara paling sederhana untuk membuat objek string adalah dengan memanggil metode string pada kelas NSString, yang mengembalikan objek string kosong. Lihatlah referensi kelas NSString untuk daftar lengkap penginisialisasi.

Jalur umum lainnya untuk membuat objek string adalah melalui literal string seperti yang ditunjukkan pada contoh di bawah ini. Dalam contoh ini, string literal ditugaskan ke variabel someString. Pada waktu kompilasi, kompilator akan mengganti string literal dengan turunan NSString.

Kelas NSString memiliki banyak contoh dan metode kelas untuk membuat dan memanipulasi string dan Anda akan jarang, jika pernah, merasakan kebutuhan untuk subkelas NSString.

Mari kita jelajahi NSString dan subkelasnya yang dapat diubah, NSMutableString, dengan menambahkan cuplikan berikut ke main.m.

Kita mulai dengan membuat objek string menggunakan string literal. Di baris kedua, kita membuat string kedua dengan menggunakan salah satu dari initializers khusus yang disediakan NSString. String yang bisa berubah kemudian dibuat dengan melewatkan string pertama sebagai argumen. Untuk mengilustrasikan string yang dapat berubah dapat dimodifikasi setelah dibuat, string2 ditambahkan ke string yang dapat berubah dan masuk ke jendela konsol.


NSArray dan NSSet

Kelas NSArray mengelola suatu daftar objek yang tidak berubah dan teratur. Kerangka Foundation juga mendefinisikan subkelas yang dapat berubah dari NSArray, NSMutableArray. Kelas NSArray berperilaku sangat mirip dengan array C dengan perbedaan bahwa turunan NSArray mengatur objek. Selain itu, NSArray menyatakan berbagai metode yang memfasilitasi bekerja dengan array, seperti metode untuk mencari dan menyortir objek dalam larik.

Sangat penting untuk memahami bahwa contoh NSArray, NSSet, dan NSDictionary hanya dapat menyimpan objek. Ini berarti bahwa tidak mungkin menyimpan jenis skalar, pointer, atau struktur dalam kelas koleksi ini—atau subkelasnya—kompiler akan melemparkan kesalahan jika Anda melakukannya. Solusinya adalah dengan membungkus jenis skalar, pointer, dan struktur dalam sebuah instance NSValue atau NSNumber seperti yang kita lihat sebelumnya dalam artikel ini.

Tambahkan cuplikan kode berikut ini ke main.m untuk menjelajahi NSArray dan mitranya yang dapat berubah, NSMutableArray.

Di baris pertama, kita membuat sebuah array dengan menggunakan metode class array:arraywithObjects:. Metode ini menerima sejumlah variabel argumen—objek—dengan argumen terakhir nil—yang tidak termasuk dalam array. Pada baris kedua dan ketiga, kita melakukan query pada larik untuk jumlah objek dalam array dan objek yang disimpan pada indeks 2 masing-masing.

Karena NSMutableArray mewarisi dari NSArray, ia berperilaku dengan cara yang sama seperti NSArray. Perbedaan utamanya adalah objek dapat ditambahkan dan dihapus dari array setelah dibuat.

Sebelum melanjutkan, saya ingin mengatakan beberapa kata tentang NSSet. Kelas ini mirip dengan NSArray, tetapi perbedaan utamanya adalah bahwa kumpulan objek yang dikelola satu set tidak diurutkan dan duplikat tidak diizinkan.

Keuntungan dari NSSet adalah bahwa query objek-objeknya lebih cepat jika Anda hanya perlu tahu apakah suatu objek terkandung dalam set. Kerangka Foundation juga mendefinisikan NSOrderedSet. Instance dari kelas ini memiliki manfaat NSSet, tetapi juga melacak posisi setiap objek.


NSDictionary

Seperti halnya array, kamus adalah konsep umum di sebagian besar bahasa pemrograman. Di Ruby, misalnya, mereka disebut sebagai hash. Konsep dasarnya mudah, kamus mengelola koleksi statis pasangan atau entri kunci-nilai.

Seperti dalam hash Ruby, kunci entri tidak perlu menjadi objek string per se. Ini bisa berupa semua jenis objek yang sesuai dengan protokol NSCopying selama kuncinya unik dalam kamus. Dalam kebanyakan kasus, meskipun, dianjurkan untuk menggunakan objek string sebagai kunci.

Seperti larik, kamus tidak dapat menyimpan nilai nol. Jika Anda ingin merepresentasikan nilai null, maka Anda dapat menggunakan NSNull. Kelas NSNull mendefinisikan objek tunggal yang digunakan untuk melambangkan nilai nol dalam array, kamus, dan set.

Pola singleton adalah pola penting dalam banyak bahasa pemrograman. Ini membatasi instantiasi kelas ke satu objek. Anda akan berurusan dengan objek tunggal sering ketika mengembangkan aplikasi iOS.

Seperti NSArray, framework Foundation mendefinisikan subkelas yang dapat dihapus dari NSDictionary, NSMutableDictionary. Ada berbagai cara untuk memberi nama kamus. Lihatlah potongan kode berikut.

Kita pertama kali mendeklarasikan dua objek string terpisah yang berisi string yang sama. Di baris ketiga, kita membuat instance kamus dengan memanggil metode dictionaryWithObject:forKey: pada kelas NSDictionary.

Selanjutnya, kita meminta kamus untuk objek yang terkait dengan isi keyB dan log ke konsol.

Penting untuk memperhatikan detailnya. Meskipun kita menggunakan keyA sebagai kunci pasangan kunci-nilai dan keyB sebagai kunci untuk mengambil nilai atau objek pasangan kunci-nilai, kamus memberi kita objek yang benar. Kelas NSDictionary cukup pintar untuk mengetahui bahwa kita menginginkan objek yang terkait dengan string myKey. Apa artinya ini? Meskipun objek keyA dan keyB adalah objek yang berbeda, string yang dikandungnya sama dan itulah yang digunakan oleh kelas NSDictionary untuk mereferensikan objek.

Fragmen kode berikut menunjukkan bahwa kamus dapat berisi kamus lain—atau susunan—dan itu juga menunjukkan cara bekerja dengan kamus yang bisa berubah.


Objective-C Literals

Sebelumnya dalam artikel ini, saya memperkenalkan Anda ke literal string Objective-C, seperti @"This is a string literal.". Mereka mengambil bentuk awalan huruf C yang diawali dengan tanda @. Seperti yang mungkin Anda ketahui sekarang, tanda @ menunjukkan bahwa kita memasuki wilayah Objective-C.

Sebuah Objective-C literal tidak lebih dari sebuah blok kode yang merujuk objek Objective-C. Dengan rilis Xcode 4.5, Anda sekarang dapat juga menggunakan literal Objective-C untuk NSNumber, NSArray, dan NSDictionary. Lihatlah potongan kode berikut untuk melihat bagaimana ini bekerja.

Tidak hanya Objective-C literals yang keren dan seksi, mereka juga membuat kode Anda lebih mudah dibaca. Mark Hammonds menulis tutorial tentang Objective-C literals. Baca posting Mark untuk gambaran yang lebih lengkap dari literal Objective-C.


Logging dengan NSLog

Dalam artikel ini, kita telah berulang kali menggunakan fungsi NSLog, yang didefinisikan oleh kerangka Foundation. NSLog menerima sejumlah variabel argumen dengan argumen pertama berupa string literal. String literal dapat berisi penspesifikasi format yang digantikan oleh argumen ekstra yang dilewatkan ke fungsi NSLog.

Kunjungi Mac Developer Library untuk daftar lengkap penentu format yang dapat digunakan.


Kesimpulan

Meskipun kita telah membahas banyak hal dalam artikel ini, kita hampir tidak menggores permukaan apa yang ditawarkan oleh kerangka kerja Foundation.

Tidak perlu mengetahui rincian setiap kelas atau fungsi yang didefinisikan dalam kerangka Foundation untuk memulai dengan pengembangan iOS. Anda akan belajar lebih banyak tentang kerangka Foundation ketika Anda menjelajahi SDK iOS.

Di artikel berikutnya, kita akan menjelajahi kerangka kerja UIKit dan saya juga akan membahas seluk beluk aplikasi iOS.

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Scroll to top
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.