Cocoa (fra engelsk - " cocoa ") er en objektorienteret API til macOS -operativsystemet fra Apple . Det er en af de fem vigtigste API'er , der er tilgængelige i Mac OS X - Cocoa, Carbon , Toolbox (til at køre ældre Mac OS 9 -programmer ), POSIX og Java . Sprog som Perl , Python og Ruby betragtes ikke som hovedsprog, da der ikke er skrevet mange seriøse programmer til Mac OS X i dem endnu.
Applikationer , der bruger Cocoa, udvikles typisk ved hjælp af Apples Xcode -udviklingsmiljø (tidligere kaldet Project Builder ) og Interface Builder ved hjælp af programmeringssprog : C , Objective-C og Swift . Cocoa-miljøet er dog også tilgængeligt, når der udvikles på andre sprog såsom Ruby , Python og Perl ved hjælp af linkbibliotekerne ( henholdsvis MacRuby , PyObjC og CamelBones ). Det er også muligt at skrive Objective-C Cocoa-programmer i en almindelig teksteditor og manuelt kompilere dem ved hjælp af GCC- eller GNUstep-makescripts .
Fra slutbrugerens synspunkt er Cocoa-applikationer applikationer skrevet ved hjælp af Cocoa-programmeringsmiljøet. Sådanne applikationer har normalt et karakteristisk udseende, da dette miljø gør det meget nemmere at understøtte Apples retningslinjer for menneskelige grænseflader.
Kakao er en fortsættelse af NeXTSTEP- og OPENSTEP -softwaremiljøerne, der blev udviklet af NeXT i slutningen af 1980'erne. Apple købte NeXT i december 1996 og begyndte at arbejde på styresystemet Rhapsody , som skulle være den direkte efterfølger til OPENSTEP. Det skulle inkludere den såkaldte "Blue Box" ( Blue Box ) for at give emulering af Mac OS -programmer . Biblioteksbasen og understøttelsen af det eksekverbare OPENSTEP filformat blev kaldt "Yellow Box" ( Yellow Box ). Rhapsody udviklede sig til Mac OS X, og Yellow Box blev til Cocoa. Som et resultat begynder Cocoa-klassenavne med bogstaverne NS (for NeXTStep [1] ): NSString, NSArray osv.
Det meste af koden skrevet til OPENSTEP er gået ind i Cocoa og Mac OS X, men der er nogle forskelle. For eksempel brugte NeXTSTEP og OPENSTEP Display PostScript -teknologi til at vise tekst og grafik på skærmen , mens Cocoa bruger Apples Quartz -system (som bruger samme billedmodel som PDF ). Derudover har Cocoa understøttelse af internettet, såsom NSURL-klassen og WebKit -klasserne til at arbejde med HTML , mens OPENSTEP kun havde begrænset support til at arbejde med netværksforbindelser ved hjælp af NSFileHandle-klassen og Berkeley-sockets.
Tidligere blev mærkenavnet "Kakao" brugt som navnet på en applikation, der giver børn mulighed for at skabe multimedieprojekter. Oprindeligt kendt som KidSim , er denne app nu ejet af en tredjepart og mærket som Stagecast Creator . Opsigelsen af støtten til programmet blev gennemført i overensstemmelse med den rationalisering, der fulgte efter Steve Jobs tilbagevenden til Apple. Det gamle navn blev genbrugt for at undgå en forsinkelse af ny varemærkeregistrering , og Stagecast gik med til at udvikle den tidligere Cocoa under det nye navn.
En af funktionerne i kakaomiljøet er en mekanisme til styring af dynamisk allokeret hukommelse. NSObject-klassen, hvorfra de fleste Cocoa-klasser, både standard og brugerdefinerede, er afledt, implementerer en referencetællemekanisme til hukommelsesstyring . Objekter afledt af NSObject reagerer på beskeder retainog releasegemmer referenceantallet, som kan findes ved at sende en besked til objektet retainCount. Et objekt, der nyligt er oprettet ved hjælp af alloceller metoderne, copyhar et referenceantal på én. At sende en besked til et objekt retainøger antallet af referencer, og at sende en besked release reducerer det. Når referenceantallet når nul, slettes objektet, og den hukommelse, det optog, frigives (afallokering af hukommelse til Objective-C- objekter er det samme som at kalde destruktoren for C++-objekter. Metoden deallocgør stort set det samme som destruktoren i C++. Dens opkald ikke garanteret). Denne referencetællingsmetode minder meget om Microsofts COM med dens IUnknown -grænseflade . IUnknown giver funktionalitet svarende til både og .retainreleaseAddRefRelease
Ud over referencetælling kan programmører drage fordel af autorelease-puljer. Ved at sende en besked til autoreleaseet objekt registreres objektet i den aktuelle tråds nærmeste autorelease-pulje til fremtidig frigivelse. Når selve autorelease-puljen er frigivet, sender den en besked releasefor hver tidligere sendt besked autorelease. Automatisk deallokerede puljer oprettes og deallokeres typisk i begyndelsen og slutningen af en meddelelsesløkke, hvilket sikrer, at programkørsel afslutter den blok, hvor objekter blev registreret til autodeallokering. Det betyder, at applikationen kører forudsigeligt og frigør hukommelse gennemsigtigt for brugeren, mens man bruger automatisk skraldindsamling i de fleste tilfælde stopper programmet pludselig med at reagere på brugerhandlinger, når det starter.
Automatisk affaldsindsamling i Cocoa er blevet understøttet siden Objective-C 2.0, da den blev udviklet i Xcode 3.0, inkluderet i Mac OS X 10.5 Leopard. Programmøren har nu mulighed for at vælge mellem automatisk og manuel hukommelseshåndtering. Meningerne er delte om den mest effektive måde at styre hukommelsen på. Nogle programmører hævder, at referencetælling er bedre, fordi det giver udvikleren mulighed for at have fin kontrol over, hvornår objekter deallokeres, uden at kræve manuel allokering af hukommelse for hvert objekt, der bruges i programmet, og ikke forårsager de ydeevneforsinkelser, der er forbundet med automatisk dagrenovation. Andre siger, at hele denne ordning er ubrugelig, at Java - stil automatisk skraldindsamling er den bedste løsning, da det i høj grad reducerer sandsynligheden for programmørfejl, når du arbejder med hukommelse. Affaldsindsamling i Kakao bryder ikke programmernes bagudkompatibilitet, det bruges kun til projekter, der er specifikt kompileret med det.
Det er også muligt at kombinere disse to tilgange. Moderne skraldesamlere lader sig ofte starte og stoppe midt i en opgave, hvilket gør det muligt for en applikation at kontrollere mængden af tid, der er allokeret til systemopkald. At kombinere denne tilgang med AppKit-puljer, der frigives automatisk i slutningen af meddelelsesløkken, ser ud til at give det bedste kompromis. Et lignende system er blevet implementeret med succes i GNUstep , GNU 's frit distribuerbare analog af OpenStep .
Kakao består primært af to Objective-C objektbiblioteker kaldet Frameworks . Rammer er nogenlunde det samme som dynamiske biblioteker . De er kompilerede objekter, der indlæses i et programs adresserum ved kørsel, men derudover inkluderer rammerne ressourcer, header-filer og dokumentation. Kakao inkluderer også et versionskontrolsystem, der forhindrer problemer, der opstår i Microsoft Windows (såkaldt " DLL-helvede ").
Et nøgleelement i kakao-arkitekturen er udsigtsmodellen. Udadtil er det organiseret som en almindelig ramme, men implementeret ved hjælp af PDF til alle tegneoperationer leveret af Quartz . Dette giver programmøren mulighed for at tegne, hvad de vil, ved hjælp af kommandoerne i et PostScript -lignende sprog . Derudover giver den automatisk mulighed for at udskrive enhver visning. Fordi Cocoa håndterer beskæring, rulning, skalering og andre almindelige grafikgengivelsesopgaver, er programmøren fritaget for behovet for at implementere den underliggende infrastruktur og kan fokusere på de unikke aspekter af den applikation, der udvikles.
Teams af Smalltalk- programmører hos Xerox PARC udviklede til sidst en filosofi, der gjorde det muligt for dem at forenkle udviklingen og markant øge mængden af genanvendelig kode. Kendt som Model-View-Behavior (MVC) paradigmet, opdeler dette koncept en applikation i tre sæt interagerende klasser. Modelklasser repræsenterer data såsom dokumenter, indstillingsfiler eller objekter i hukommelsen. Visninger, som navnet antyder, viser data (ofte visuelt). Adfærdsklasser indeholder den logik, der forbinder modeller med deres respektive synspunkter og holder dem synkroniseret.
I kakaoarkitekturen overholdes principperne for MVC strengt. I OpenStep var de fleste klasser enten repræsentationer på højt niveau (AppKit-klasser) eller relativt lavt niveau-modelklasser (såsom NSString). Sammenlignet med lignende MVC-systemer manglede OpenStep en stærk modelbase. For eksempel var der ingen basisklasse, der ville repræsentere et dokument. Under overgangen til Cocoa blev modelbasen utroligt udvidet til at omfatte flere klar-til-brug-klasser, der gav funktionalitet, der er fælles for de fleste brugerapplikationer.
I Mac OS X 10.3 introducerede Apple NSController, en familie af MVC-klasser, der giver standardadfærdsfunktionalitet. Disse klasser betragtes som en del af Cocoa Bindings -systemet, som gør udstrakt brug af protokoller som Key-Value Coding og Key-Value Observing . Udtrykket binding betyder binding af to objekter, ofte et syn og en adfærd. Cocoa Bindings giver udvikleren mulighed for at fokusere på at beskrive relationerne mellem objekter, i stedet for at beskrive programmets adfærd i detaljer.
Med udgivelsen af Mac OS X 10.4 udvidede Apple kerneklasserne yderligere ved at introducere Core Data frameworket , som automatiserer sporing af ændringer i modeller og lagring af dem (for eksempel til en fil). Denne ramme forenkler i høj grad arbejdet med data i en applikation ved at give automatisk support til at læse dokumenter fra en fil og gemme dem i en fil, samt arkitekturer til at fortryde og gendanne ændringer.
Ved at levere rammer, der understøtter alle tre lag af MVC, er Apples mål at reducere mængden af "lim"-kode, som udviklere skal skrive, og dermed frigøre deres tid til at skrive applikationsspecifikke funktioner.
I objektorienterede sprog som Java eller C++ er metodekald fysisk repræsenteret i hukommelsen som pointere. Dette begrænser applikationens design, fordi navnet på den metode, der skal kaldes, skal være kendt på forhånd. Selvom kakao for det meste bevarer denne tilgang, giver sen binding i Objective-C mulighed for mere fleksibilitet.
I Objective-C er metoder repræsenteret af en selector , som er en streng, der beskriver den metode, der påberåbes. Når en besked sendes til et objekt, får Objective-C-miljøet den vælger, det finder, og kalder derefter den påkrævede metode. Fordi vælgeren er en tekststreng, kan den gemmes i en fil, sendes over et netværk eller mellem processer eller behandles på anden måde. Søgningen efter den kode, der udføres, når en metode kaldes, udføres ved kørsel, ikke på kompileringstidspunktet for programmet. Dette sænker kun ydeevnen lidt, men det giver stadig den samme vælger mulighed for at pege på forskellige implementeringer af metoden.
Tilsvarende har Cocoa en omfattende objektteknologi kaldet Key-Value Coding (KVC). Det giver dig mulighed for at få adgang til et dataelement eller egenskab for et objekt, samt ændre det ved kørsel efter navn - navnet på egenskaben fungerer som en nøgle til dets værdi. KVC fører til ekstrem designfleksibilitet - du behøver ikke at kende typen af et objekt, men enhver af dets egenskaber kan opnås ved hjælp af KVC. Derudover synkroniserer kakaoteknologi kaldet Key-Value Observing (KVO) automatisk egenskaberne for objekter, der er relateret til hinanden.
En af de mest nyttige ting ved kakao er de kraftfulde "basisobjekter", som systemet leverer. Som et eksempel henvises til Foundation NSStringog klasser NSAttributedString, som understøtter Unicode -strenge, og systemet NSTexti AppKit, der tillader programmøren at vise strenge i en GUI.
NSTextog relaterede klasser bruges til at vise og redigere strenge. Disse objekter giver dig mulighed for at implementere hvad som helst i applikationen, fra det enkleste tekstinputfelt på én linje til et layoutsystem, der understøtter paginering og flere kolonner, såvel som professionelle typografiske funktioner såsom udligning , ligaturer , tekstombrydning omkring alle former, tekst rotationer, fuld understøttelse af Unicode og skrifttypeudjævning . Afsnitsegenskaber kan styres både programmatisk og af brugeren ved hjælp af linealobjektet, som kan knyttes til enhver visning, der viser tekst. Stavekontrol kan også udføres automatisk ved at bruge en enkelt ordbog til alle applikationer og "snurret understregning", som Microsoft har udviklet (i Cocoa ligner det en rød stiplet linje). Der er indbygget understøttelse for ubegrænset fortryd og fortryd. Ved kun at bruge den indbyggede funktionalitet er det muligt at skrive en teksteditor i 13 linjer kode . Med de nye controller-objekter kan dette antal rækker reduceres til nul. Dette er i skarp kontrast til TextEdit API, der findes i tidligere versioner af Mac OS.
Objective-C gør det meget nemt at udvide funktionaliteten af eksisterende klasser. Den understøtter såkaldte kategorier , som giver dig mulighed for at ændre eksisterende klasser "på plads". Ved hjælp af kategorier kan du tilføje den nødvendige funktionalitet uden at foretage ændringer i dem, og endda uden overhovedet at have adgang til kildekoden for eksisterende klasser. På andre mere almindelige sprog ville dette kræve, at programmøren opretter en ny klasse, der understøtter yderligere funktionalitet, og derefter omhyggeligt erstatter alle brugte objekter i den overordnede klasse med denne nye.
Kakao-rammer er skrevet i Objective-C , hvorfor dette sprog er det foretrukne sprog til at skrive Kakao-applikationer. Der findes også et bundt til Java-sproget (Cocoa-Java Bridge), som dog ikke er specielt populært blandt udviklere. Desuden betyder brugen af sen binding, at mange nøglefunktioner i Cocoa ikke kan bruges i Java. I 2005 annoncerede Apple, at Cocoa-Java ville blive udfaset. Med andre ord vil funktioner tilføjet til Cocoa i versioner af Mac OS X efter 10.4 ikke blive tilføjet til Cocoa-Java-grænsefladen.
AppleScript Studio , der følger med Xcode Tools, gør det muligt at skrive simple Cocoa-applikationer i AppleScript . Der er også et tredjeparts scriptsprog, F-Script , til Cocoa, der giver direkte adgang til Cocoa-objekter og giver et sæt GUI-værktøjer til at spore deres tilstand.
Tredjepartspakker er også tilgængelige for andre sprog: [2]
Derudover er der gratis implementeringer af de centrale dele af Cocoa, der giver mulighed for applikationsudvikling på tværs af platforme (inklusive Windows ):
Der er projekter, der oversætter kakao-applikationer skrevet i Objective -C til JavaScript -webapplikationer :
macOS | |
---|---|
Ansøgninger | |
Hjælpeprogrammer |
|
Teknologi og brugerflade _ |
|
af GUI-elementer | Værktøjssæt (sæt)|||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
lavt niveau |
| ||||||||||||||||||||||||||
højt niveau |
|