# Cocoa API
Cocoa, masaüstü işletim sistemi macOS için Apple'ın yerel nesne yönelimli programlama ve uygulama programlama arayüzüdür (API).
iOS, tvOS ve watchOS için, Cocoa Touch adlı jest tanıma, animasyon ve farklı grafik kontrol öğeleri içeren benzer bir API vardır. iPhone, iPad, iPod Touch, Apple TV ve Apple 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 ve Objective-C çalışma zamanı gibi olanlar tarafından dahil edilen kütüphanelerden ve çerçevelerden oluşur.
Cocoa uygulamaları tipik olarak, Objective-C veya Swift programlama dillerini kullanan Apple, özellikle Xcode (eski adı Project Builder) ve Interface Builder (şimdi Xcode'un bir parçası) tarafından sağlanan geliştirme araçları kullanılarak geliştirilir. Ancak, Cocoa programlama ortamına, PasCocoa, PyObjC, CamelBones, RubyCocoa ve D gibi köprü mekanizmalarının yardımıyla Clozure CL, LispWorks, Object Pascal, Python, Perl, Ruby ve AppleScript gibi başka araçlar kullanılarak erişilebilir. Köprü mekanizmasına duyulan ihtiyacı ortadan kaldıran MacRuby adında bir Ruby dili uygulaması, daha önce Apple tarafından geliştirilmiştir. Nu ise köprü olmadan Cocoa ile birlikte kullanılabilen Lisp benzeri bir dildir. Objective-C Cocoa programlarını basit bir metin editöründe yazmak ve komut satırından veya make'den GNU Compiler Collection (GCC) veya Clang ile manuel olarak oluşturmak da mümkündür.
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.


## Tarihi.
Cocoa, 1980'lerde ve 1990'larda NeXT tarafından geliştirilen NextStep ve OpenStep 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 olacak Rhapsody işletim sistemi üzerinde çalışmaya başladı. Blue Box adlı klasik macOS ve Macintosh 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ı. Rhapsody Mac 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'ın Quartz'ına (Taşınabilir Belge Formatı (PDF) görüntüleme modelini kullanıyor) dayanıyor. Cocoa ayrıca NSURL ve WebKit HTML sınıfları ve diğerleri de dahil olmak üzere bir İnternet desteği seviyesine sahipken; OpenStep, NSFileHandle sınıfları ve Berkeley 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ı. 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ı.


## Bellek yönetimi.
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.
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. 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ı.


## Ana çerçeveler.
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.
  - Foundation Kit (Foundation), NeXTSTEP 3'teki Kurumsal Nesneler Çerçevesinde göründü. OpenStep çalışmasının bir parçası olarak geliştirildi ve daha sonra bu sistem 1994 yılında piyasaya sürüldüğünde OpenStep AppKit'in temeli oldu. MacOS de Core Foundation'a dayanıyor. Foundation  dizge ve değer manipülasyonu, kaplar ve yineleme, dağıtılmış hesaplama, olay (çalışma) döngüleri ve doğrudan grafiksel kullanıcı arayüzüne bağlı olmayan diğer fonksiyonlar sağlayan genel bir nesne yönelimli kütüphanedir. Çerçeve içindeki tüm sınıflar ve sabitler için kullanılan "NS" öneki, NeXT ve Sun Microsystems tarafından ortaklaşa geliştirilen Cocoa'nın OPENSTEP mirasından geliyor.
  - Application Kit (AppKit) doğrudan orijinal NeXTSTEP Uygulama Kitinden çıkarılmıştır. Grafiksel kullanıcı arayüzleri oluşturmak ve onlarla etkileşime geçmek için kullanabileceğiniz kod programları içerir. AppKit, Foundation üzerine kuruludur ve aynı NS önekini kullanır.
  - Core Data, Foundation ve Cocoa'ya dahil edilen ve Cocoa.h'de bulunan nesne kalıcılık çerçevesidir.