| Geliştirici | Apple |
|---|---|
| İşletim sistemi | macOS |
| Tür | Yazılım iskeleti |
| Resmî sitesi | Sitesi |
Cocoa, masaüstü işletim sistemimacOS içinApple'ın yerelnesne yönelimli programlama veuygulama programlama arayüzüdür (API).[1]
iOS,tvOS vewatchOS için,Cocoa Touch adlı jest tanıma, animasyon ve farklı grafik kontrol öğeleri içeren benzer birAPI vardır.iPhone,iPad,iPod Touch,Apple TV veApple Watch gibi Apple cihazlarının uygulamalarında kullanılır.
Cocoa, Cocoa.h başlık dosyasında yer alan Foundation Kit, Application Kit ve Core Data çerçevelerinden ve C standart kütüphanesi veObjective-C çalışma zamanı gibi olanlar tarafından dahil edilen kütüphanelerden ve çerçevelerden oluşur.[2]
Cocoa uygulamaları tipik olarak, Objective-C veyaSwift programlama dillerini kullanan Apple, özellikleXcode (eski adıProject Builder) veInterface Builder (şimdi Xcode'un bir parçası) tarafından sağlanan geliştirme araçları kullanılarak geliştirilir.[3] Ancak, Cocoa programlama ortamına,PasCocoa,PyObjC,CamelBones,RubyCocoa veD gibi köprü mekanizmalarının yardımıylaClozure CL,LispWorks,Object Pascal,Python,Perl,Ruby veAppleScript gibi başka araçlar kullanılarak erişilebilir. Köprü mekanizmasına duyulan ihtiyacı ortadan kaldıranMacRuby adında bir Ruby dili uygulaması, daha önce Apple tarafından geliştirilmiştir.Nu ise köprü olmadan Cocoa ile birlikte kullanılabilenLisp benzeri bir dildir. Objective-C Cocoa programlarını basit bir metin editöründe yazmak ve komut satırından veyamake'denGNU Compiler Collection (GCC) veyaClang ile manuel olarak oluşturmak da mümkündür.[4]
Son kullanıcılar için, Cocoa uygulamaları, Cocoa programlama ortamını kullanarak yazılanlardır. Bu tür uygulamalar genellikle tanıdık bir görünüme ve hislere sahiptir, çünkü Cocoa programlama ortamı Apple'ın insan arayüzü yönergelerine uyması için bir uygulamanın birçok yönünü otomatikleştirir.
Cocoa, 1980'lerde ve 1990'lardaNeXT tarafından geliştirilenNextStep veOpenStep programlama ortamlarından çeşitli yazılım çerçevelerinin (temel olarak App Kit ve Foundation Kit) soyuna devam ediyor. Apple, Aralık 1996'da NeXT'yi satın aldı ve ardından OpenStep'in direkt halefi olacakRhapsody işletim sistemi üzerinde çalışmaya başladı. Blue Box adlı klasikmacOS veMacintosh işletim sistemleri uygulamaları için bir öykünme tabanına sahip olmalıydı. OpenStep kütüphanelerinin ve ikili desteğin tabanı Yellow Box olarak adlandırıldı.[5] RhapsodyMac OS X'te gelişti ve Yellow Box Cocoa oldu. Bu nedenle, Cocoa sınıfları NSString veya NSArray gibi NS harfleriyle başlar. Bunlar, OpenStep çerçevesi, NeXTSTEP için orijinal tescilli terimi ifade eder.
OpenStep'in geliştirilmesine yönelik yapılan çalışmaların çoğu Mac OS X'in geliştirilmesine uygulandı, Cocoa en görünür kısımdı. Ancak farklılıklar vardır. Örneğin NeXTSTEP ve OpenStep, metin ve grafiklerin ekranda gösterilmesi için Ekran PostScript'i kullandı, ancak Cocoa Apple'ınQuartz'ına (Taşınabilir Belge Formatı (PDF) görüntüleme modelini kullanıyor) dayanıyor.[6] Cocoa ayrıca NSURL veWebKitHTML sınıfları ve diğerleri de dahil olmak üzere bir İnternet desteği seviyesine sahipken; OpenStep, NSFileHandle sınıfları veBerkeley soketleri üzerinden yönetilen ağ bağlantıları için yalnızca temel desteğe sahipti.
Sonuçta ortaya çıkan yazılım çerçevesi çaresizlik adına Cocoa adını aldı, çünkü ad zaten Apple tarafından tescilli idi. Bu ismin kullanılmasından önceki yıllar boyunca Apple'ın Cocoa markası, çocuklar için multimedya proje tasarım uygulamasının adı olarak ortaya çıkmıştı. Uygulama başlangıçta KidSim adı altında Apple Advanced Technology Group'ta geliştirildi. Daha sonra yeniden adlandırıldı ve "Cocoa" olarak markalandı. Apple adına Cocoa'yı geliştirmek için kiralanan Peter Jensen tarafından icat edilen isim, web sayfalarına gömülü olduğu için "Çocuklar için Java"yı çağrıştırmak amacıyla tasarlandı.[7] Ticari marka ve dolayısıyla "Cocoa" adı, bu yazılım çerçevesi için yeni bir ticari marka tescil ettirilirken ortaya çıkabilecek gecikmeyi önlemek için yeniden kullanıldı. Orijinal "Cocoa" programı,Steve Jobs'un Apple'a geri dönmesini izleyen rasyonelleştirmelerden birinde Apple'da durduruldu. Daha sonra üçüncü bir tarafa lisanslandı ve 2011 itibarıyla Stagecast Creator olarak pazarlandı.
Cocoa ortamının bir özelliği de dinamik olarak ayrılmış hafızayı yönetme tesisidir. CocoA'nın NSObject sınıfı, hem tedarikçinin hem de kullanıcının çoğu sınıfının türetildiği,bellek yönetimi için referans sayma şemasını uygular. NSObject kök sınıfından türetilen nesneler bir tutma ve bırakma iletisine yanıt verir ve bir tutma sayısını korur. RetainCount adlı bir yöntem var ancak isminin tersine, genellikle bir nesnenin tam alıkoyma sayısını döndürmez. Genelde sistem düzeyinde amaçlar için kullanılır.[8]
Tahsis veya kopya ile yaratılan yeni tahsis edilen bir nesnenin tutma sayısı vardır. Bu nesneye bir tutma mesajı gönderilmesi tutma sayısını artırırken, bırakma mesajı gönderildiğinde tutma sayısını azaltır. Bir nesnenin tutma sayısı sıfıra ulaştığında, bir C ++ yıkıcısına benzer bir prosedürle serbest bırakılır.
Objective-C 2.0 ile başlayarak Objective-C çalışma zamanı, artık Otomatik Referans Sayma (ARC) lehine eski ve kullanımdan kaldırılmış isteğe bağlı bir çöp toplayıcı uyguladı. Bu modelde, çalışma zamanı "tutma" ve "bırakma" gibi Cocoa referans sayma işlemlerini çalışmaz hale getirdi. Çöp toplayıcı, Objective-C 2.0'ın iOS uygulamasında mevcut değildir.[9] Objective-C'deki çöp toplama işlemi düşük öncelikli bir arka plan iş parçacığına dayanıyordu ve kullanıcı deneyimini duyarlı tutmak amacıyla Cocoa'nın kullanıcı etkinliklerini durdurabiliyordu. Eski çöp toplayıcı Mac OS X sürüm 10.13'te hala kullanılabilir ancak Apple tarafından sağlanan hiçbir uygulama bunu kullanmaz.
2011 yılında LLVM derleyicisi, Objective-C kaynak kodunun statik analizini yaparak ve gerektiğinde tutma ve bırakma mesajlarını yerleştirerek geleneksel çöp toplayıcının yerini alan Otomatik Referans Sayma (ARC) 'yı başlattı.
Cocoa, çerçeveler adı verilen üç Objective-C nesne kütüphanesinden oluşur. Altyapılar işlevsel olarak paylaşılan kitaplıklara benzer; çalışma zamanında programın adres alanına dinamik olarak yüklenebilen derlenmiş bir nesnedir ancak çerçeveler ilişkili kaynakları, başlık dosyalarını ve belgeleri ekler. Cocoa çerçeveleri, yukarıda belirtilen parçaları standart konumlarda içeren bir tür paket olarak uygulanır.[10]