CINXE.COM
Objective-C – Wikipedia
<!DOCTYPE html> <html class="client-nojs" lang="de" dir="ltr"> <head> <meta charset="UTF-8"> <title>Objective-C – Wikipedia</title> <script>(function(){var className="client-js";var cookie=document.cookie.match(/(?:^|; )dewikimwclientpreferences=([^;]+)/);if(cookie){cookie[1].split('%2C').forEach(function(pref){className=className.replace(new RegExp('(^| )'+pref.replace(/-clientpref-\w+$|[^\w-]+/g,'')+'-clientpref-\\w+( |$)'),'$1'+pref+'$2');});}document.documentElement.className=className;}());RLCONF={"wgBreakFrames":false,"wgSeparatorTransformTable":[",\t.",".\t,"],"wgDigitTransformTable":["",""],"wgDefaultDateFormat":"dmy","wgMonthNames":["","Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],"wgRequestId":"4dfe20b8-e8dc-4a2b-9150-ec42116dd942","wgCanonicalNamespace":"","wgCanonicalSpecialPageName":false,"wgNamespaceNumber":0,"wgPageName":"Objective-C","wgTitle":"Objective-C","wgCurRevisionId":232689645,"wgRevisionId":232689645,"wgArticleId":32732,"wgIsArticle":true,"wgIsRedirect":false,"wgAction":"view","wgUserName":null,"wgUserGroups":["*"],"wgCategories":[ "Wikipedia:Defekte Weblinks/Ungeprüfte Archivlinks 2019-05","Objective-C","NeXT","MacOS-Software","GNUstep","Objektorientierte Programmiersprache"],"wgPageViewLanguage":"de","wgPageContentLanguage":"de","wgPageContentModel":"wikitext","wgRelevantPageName":"Objective-C","wgRelevantArticleId":32732,"wgIsProbablyEditable":true,"wgRelevantPageIsProbablyEditable":true,"wgRestrictionEdit":[],"wgRestrictionMove":[],"wgNoticeProject":"wikipedia","wgCiteReferencePreviewsActive":true,"wgFlaggedRevsParams":{"tags":{"accuracy":{"levels":1}}},"wgStableRevisionId":232689645,"wgMediaViewerOnClick":true,"wgMediaViewerEnabledByDefault":true,"wgPopupsFlags":0,"wgVisualEditor":{"pageLanguageCode":"de","pageLanguageDir":"ltr","pageVariantFallbacks":"de"},"wgMFDisplayWikibaseDescriptions":{"search":true,"watchlist":true,"tagline":true,"nearby":true},"wgWMESchemaEditAttemptStepOversample":false,"wgWMEPageLength":30000,"wgRelatedArticlesCompat":[],"wgEditSubmitButtonLabelPublish":true,"wgULSPosition": "interlanguage","wgULSisCompactLinksEnabled":true,"wgVector2022LanguageInHeader":false,"wgULSisLanguageSelectorEmpty":false,"wgWikibaseItemId":"Q188531","wgCheckUserClientHintsHeadersJsApi":["brands","architecture","bitness","fullVersionList","mobile","model","platform","platformVersion"],"GEHomepageSuggestedEditsEnableTopics":true,"wgGETopicsMatchModeEnabled":false,"wgGEStructuredTaskRejectionReasonTextInputEnabled":false,"wgGELevelingUpEnabledForUser":false};RLSTATE={"ext.gadget.citeRef":"ready","ext.gadget.defaultPlainlinks":"ready","ext.gadget.dewikiCommonHide":"ready","ext.gadget.dewikiCommonLayout":"ready","ext.gadget.dewikiCommonStyle":"ready","ext.gadget.NavFrame":"ready","ext.globalCssJs.user.styles":"ready","site.styles":"ready","user.styles":"ready","ext.globalCssJs.user":"ready","user":"ready","user.options":"loading","ext.cite.styles":"ready","ext.pygments":"ready","skins.vector.styles.legacy":"ready","ext.flaggedRevs.basic":"ready","mediawiki.codex.messagebox.styles": "ready","ext.visualEditor.desktopArticleTarget.noscript":"ready","codex-search-styles":"ready","ext.uls.interlanguage":"ready","wikibase.client.init":"ready","ext.wikimediaBadges":"ready"};RLPAGEMODULES=["ext.cite.ux-enhancements","ext.pygments.view","mediawiki.page.media","site","mediawiki.page.ready","mediawiki.toc","skins.vector.legacy.js","ext.centralNotice.geoIP","ext.centralNotice.startUp","ext.flaggedRevs.advanced","ext.gadget.createNewSection","ext.gadget.WikiMiniAtlas","ext.gadget.OpenStreetMap","ext.gadget.CommonsDirekt","ext.gadget.donateLink","ext.urlShortener.toolbar","ext.centralauth.centralautologin","mmv.bootstrap","ext.popups","ext.visualEditor.desktopArticleTarget.init","ext.visualEditor.targetLoader","ext.echo.centralauth","ext.eventLogging","ext.wikimediaEvents","ext.navigationTiming","ext.uls.compactlinks","ext.uls.interface","ext.cx.eventlogging.campaigns","ext.checkUser.clientHints","ext.quicksurveys.init","ext.growthExperiments.SuggestedEditSession", "wikibase.sidebar.tracking"];</script> <script>(RLQ=window.RLQ||[]).push(function(){mw.loader.impl(function(){return["user.options@12s5i",function($,jQuery,require,module){mw.user.tokens.set({"patrolToken":"+\\","watchToken":"+\\","csrfToken":"+\\"}); }];});});</script> <link rel="stylesheet" href="/w/load.php?lang=de&modules=codex-search-styles%7Cext.cite.styles%7Cext.flaggedRevs.basic%7Cext.pygments%2CwikimediaBadges%7Cext.uls.interlanguage%7Cext.visualEditor.desktopArticleTarget.noscript%7Cmediawiki.codex.messagebox.styles%7Cskins.vector.styles.legacy%7Cwikibase.client.init&only=styles&skin=vector"> <script async="" src="/w/load.php?lang=de&modules=startup&only=scripts&raw=1&skin=vector"></script> <meta name="ResourceLoaderDynamicStyles" content=""> <link rel="stylesheet" href="/w/load.php?lang=de&modules=ext.gadget.NavFrame%2CciteRef%2CdefaultPlainlinks%2CdewikiCommonHide%2CdewikiCommonLayout%2CdewikiCommonStyle&only=styles&skin=vector"> <link rel="stylesheet" href="/w/load.php?lang=de&modules=site.styles&only=styles&skin=vector"> <meta name="generator" content="MediaWiki 1.44.0-wmf.5"> <meta name="referrer" content="origin"> <meta name="referrer" content="origin-when-cross-origin"> <meta name="robots" content="max-image-preview:standard"> <meta name="format-detection" content="telephone=no"> <meta name="viewport" content="width=1120"> <meta property="og:title" content="Objective-C – Wikipedia"> <meta property="og:type" content="website"> <link rel="preconnect" href="//upload.wikimedia.org"> <link rel="alternate" media="only screen and (max-width: 640px)" href="//de.m.wikipedia.org/wiki/Objective-C"> <link rel="alternate" type="application/x-wiki" title="Seite bearbeiten" href="/w/index.php?title=Objective-C&action=edit"> <link rel="apple-touch-icon" href="/static/apple-touch/wikipedia.png"> <link rel="icon" href="/static/favicon/wikipedia.ico"> <link rel="search" type="application/opensearchdescription+xml" href="/w/rest.php/v1/search" title="Wikipedia (de)"> <link rel="EditURI" type="application/rsd+xml" href="//de.wikipedia.org/w/api.php?action=rsd"> <link rel="canonical" href="https://de.wikipedia.org/wiki/Objective-C"> <link rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/deed.de"> <link rel="alternate" type="application/atom+xml" title="Atom-Feed für „Wikipedia“" href="/w/index.php?title=Spezial:Letzte_%C3%84nderungen&feed=atom"> <link rel="dns-prefetch" href="//meta.wikimedia.org" /> <link rel="dns-prefetch" href="//login.wikimedia.org"> </head> <body class="skin-vector-legacy mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject mw-editable page-Objective-C rootpage-Objective-C skin-vector action-view"><div id="mw-page-base" class="noprint"></div> <div id="mw-head-base" class="noprint"></div> <div id="content" class="mw-body" role="main"> <a id="top"></a> <div id="siteNotice"><!-- CentralNotice --></div> <div class="mw-indicators"> </div> <h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">Objective-C</span></h1> <div id="bodyContent" class="vector-body"> <div id="siteSub" class="noprint">aus Wikipedia, der freien Enzyklopädie</div> <div id="contentSub"><div id="mw-content-subtitle"></div></div> <div id="contentSub2"></div> <div id="jump-to-nav"></div> <a class="mw-jump-link" href="#mw-head">Zur Navigation springen</a> <a class="mw-jump-link" href="#searchInput">Zur Suche springen</a> <div id="mw-content-text" class="mw-body-content"><div class="mw-content-ltr mw-parser-output" lang="de" dir="ltr"><table class="float-right infobox toccolours toptextcells" style="font-size:90%; margin-top:0; width:21em;"> <tbody><tr> <th colspan="2" class="hintergrundfarbe6" style="font-size:larger;">Objective-C </th></tr> <tr> <td><b>Erscheinungsjahr:</b> </td> <td><span class="wikidata-content">1984</span> </td></tr> <tr> <td><b>Designer:</b> </td> <td><span class="wikidata-content"><a href="/wiki/Brad_Cox_(Informatiker)" title="Brad Cox (Informatiker)">Brad Cox</a></span> </td></tr> <tr> <td><b>Entwickler:</b> </td> <td><a href="/wiki/Brad_Cox_(Informatiker)" title="Brad Cox (Informatiker)">Brad Cox</a>, <a href="/w/index.php?title=Tom_Love&action=edit&redlink=1" class="new" title="Tom Love (Seite nicht vorhanden)">Tom Love</a> </td></tr> <tr> <td><b>Aktuelle <a href="/wiki/Version_(Software)" title="Version (Software)">Version</a></b> </td> <td class="wikidata-content" style="white-space:nowrap;">2.0<sup id="cite_ref-_7b266ba9308ca468_1-0" class="reference"><a href="#cite_note-_7b266ba9308ca468-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup> </td></tr> <tr> <td><b><a href="/wiki/Typisierung_(Informatik)" title="Typisierung (Informatik)">Typisierung</a>:</b> </td> <td><a href="/wiki/Starke_Typisierung" title="Starke Typisierung">stark</a>, <a href="/wiki/Statische_Typisierung" title="Statische Typisierung">statisch</a>, <a href="/wiki/Typisierung_(Informatik)" title="Typisierung (Informatik)">explizit</a>, <a href="/wiki/Dynamische_Typisierung" title="Dynamische Typisierung">dynamisch</a> </td></tr> <tr> <td><b>Beeinflusst von:</b> </td> <td><a href="/wiki/Smalltalk_(Programmiersprache)" title="Smalltalk (Programmiersprache)">Smalltalk</a>, <a href="/wiki/C_(Programmiersprache)" title="C (Programmiersprache)">C</a> </td></tr> <tr> <td><b>Beeinflusste:</b> </td> <td><a href="/wiki/Swift_(Programmiersprache)" title="Swift (Programmiersprache)">Swift</a> </td></tr> <tr> <td><b><a href="/wiki/Betriebssystem" title="Betriebssystem">Betriebssystem</a>:</b> </td> <td><a href="/wiki/OPENSTEP" title="OPENSTEP">NeXTSTEP/OPENSTEP</a>; <a href="/wiki/MacOS" title="MacOS">macOS</a>/<a href="/wiki/IOS_(Betriebssystem)" title="IOS (Betriebssystem)">iOS</a>; alle, die <a href="/wiki/GNUstep" title="GNUstep">GNUstep</a> verwenden </td></tr> <tr> <td colspan="2" class="hintergrundfarbe5" style="text-align:center;"><a rel="nofollow" class="external text" href="https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/Introduction/Introduction.html">Developer documentation</a> </td></tr></tbody></table> <p><b>Objective-C</b>, auch kurz <b>ObjC</b> genannt, erweitert die <a href="/wiki/C_(Programmiersprache)" title="C (Programmiersprache)">Programmiersprache C</a> um Sprachmittel zur <a href="/wiki/Objektorientierte_Programmierung" title="Objektorientierte Programmierung">objektorientierten Programmierung</a>. Objective-C ist eine echte <a href="/wiki/Teilmenge" title="Teilmenge">Obermenge</a> von C, das bedeutet, dass jedes C-Programm mit einem Objective-C-<a href="/wiki/Compiler" title="Compiler">Compiler</a> kompiliert werden kann. Objective-C ist die primäre Sprache von <a href="/wiki/Cocoa_(API)" title="Cocoa (API)">Cocoa</a> (<a href="/wiki/MacOS" title="MacOS">macOS</a>) und <a href="/wiki/GNUstep" title="GNUstep">GNUstep</a>. </p><p>Die Syntax und Konzeption der objektorientierten Erweiterungen ist an <a href="/wiki/Smalltalk_(Programmiersprache)" title="Smalltalk (Programmiersprache)">Smalltalk</a> angelehnt und von der gewöhnlichen <a href="/wiki/Prozedurale_Programmierung" title="Prozedurale Programmierung">prozeduralen</a> C-Syntax strikt getrennt. Diese Trennung erlaubt es, dasselbe Erweiterungskonzept auf andere <a href="/wiki/Imperative_Programmierung" title="Imperative Programmierung">imperative Sprachen</a> anzuwenden; so gibt es etwa <i>Objective Pascal</i> und <i>Objective-J</i>. <b>Objective-C++</b> erlaubt teilweise die Mischung von Objective-C mit <a href="/wiki/C%2B%2B" title="C++">C++</a>-Code mit dem Ziel, älteren Code verwenden zu können. </p><p>Unter den im <a href="/wiki/TIOBE-Index" title="TIOBE-Index">TIOBE-Index</a> erfassten Sprachen konnte Objective-C in den Jahren 2011 und 2012 den größten Zuwachs verzeichnen und erhielt deshalb zweimal in Folge den Titel <i>Sprache des Jahres</i>.<sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-3" class="reference"><a href="#cite_note-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup> </p> <div id="toc" class="toc" role="navigation" aria-labelledby="mw-toc-heading"><input type="checkbox" role="button" id="toctogglecheckbox" class="toctogglecheckbox" style="display:none" /><div class="toctitle" lang="de" dir="ltr"><h2 id="mw-toc-heading">Inhaltsverzeichnis</h2><span class="toctogglespan"><label class="toctogglelabel" for="toctogglecheckbox"></label></span></div> <ul> <li class="toclevel-1 tocsection-1"><a href="#Geschichte"><span class="tocnumber">1</span> <span class="toctext">Geschichte</span></a></li> <li class="toclevel-1 tocsection-2"><a href="#Wesentliche_Eigenschaften"><span class="tocnumber">2</span> <span class="toctext">Wesentliche Eigenschaften</span></a> <ul> <li class="toclevel-2 tocsection-3"><a href="#Dynamisches_Binden"><span class="tocnumber">2.1</span> <span class="toctext">Dynamisches Binden</span></a></li> <li class="toclevel-2 tocsection-4"><a href="#Dynamische_Typisierung_und_typloses_id"><span class="tocnumber">2.2</span> <span class="toctext">Dynamische Typisierung und typloses id</span></a></li> <li class="toclevel-2 tocsection-5"><a href="#Nachrichten"><span class="tocnumber">2.3</span> <span class="toctext">Nachrichten</span></a></li> <li class="toclevel-2 tocsection-6"><a href="#Kategorien"><span class="tocnumber">2.4</span> <span class="toctext">Kategorien</span></a></li> <li class="toclevel-2 tocsection-7"><a href="#Protokolle"><span class="tocnumber">2.5</span> <span class="toctext">Protokolle</span></a></li> <li class="toclevel-2 tocsection-8"><a href="#RTTI/Reflexion"><span class="tocnumber">2.6</span> <span class="toctext">RTTI/Reflexion</span></a></li> <li class="toclevel-2 tocsection-9"><a href="#Klassenobjekte"><span class="tocnumber">2.7</span> <span class="toctext">Klassenobjekte</span></a></li> </ul> </li> <li class="toclevel-1 tocsection-10"><a href="#Syntax"><span class="tocnumber">3</span> <span class="toctext">Syntax</span></a> <ul> <li class="toclevel-2 tocsection-11"><a href="#Klassendefinition"><span class="tocnumber">3.1</span> <span class="toctext">Klassendefinition</span></a> <ul> <li class="toclevel-3 tocsection-12"><a href="#Klassenbezeichnung_und_Vererbung"><span class="tocnumber">3.1.1</span> <span class="toctext">Klassenbezeichnung und Vererbung</span></a></li> <li class="toclevel-3 tocsection-13"><a href="#Instanzvariablen"><span class="tocnumber">3.1.2</span> <span class="toctext">Instanzvariablen</span></a></li> <li class="toclevel-3 tocsection-14"><a href="#Properties_(Eigenschaften)"><span class="tocnumber">3.1.3</span> <span class="toctext">Properties (Eigenschaften)</span></a></li> <li class="toclevel-3 tocsection-15"><a href="#Methodendeklarationen"><span class="tocnumber">3.1.4</span> <span class="toctext">Methodendeklarationen</span></a></li> <li class="toclevel-3 tocsection-16"><a href="#Implementierung"><span class="tocnumber">3.1.5</span> <span class="toctext">Implementierung</span></a></li> </ul> </li> <li class="toclevel-2 tocsection-17"><a href="#Nachrichten_2"><span class="tocnumber">3.2</span> <span class="toctext">Nachrichten</span></a></li> <li class="toclevel-2 tocsection-18"><a href="#Locking"><span class="tocnumber">3.3</span> <span class="toctext">Locking</span></a></li> <li class="toclevel-2 tocsection-19"><a href="#Exceptions"><span class="tocnumber">3.4</span> <span class="toctext">Exceptions</span></a></li> </ul> </li> <li class="toclevel-1 tocsection-20"><a href="#Klassenobjekt"><span class="tocnumber">4</span> <span class="toctext">Klassenobjekt</span></a></li> <li class="toclevel-1 tocsection-21"><a href="#Typkonzept"><span class="tocnumber">5</span> <span class="toctext">Typkonzept</span></a></li> <li class="toclevel-1 tocsection-22"><a href="#Spätes_Binden"><span class="tocnumber">6</span> <span class="toctext">Spätes Binden</span></a></li> <li class="toclevel-1 tocsection-23"><a href="#Objective-C++"><span class="tocnumber">7</span> <span class="toctext">Objective-C++</span></a></li> <li class="toclevel-1 tocsection-24"><a href="#Objective-C_2.0"><span class="tocnumber">8</span> <span class="toctext">Objective-C 2.0</span></a> <ul> <li class="toclevel-2 tocsection-25"><a href="#Garbage_Collection"><span class="tocnumber">8.1</span> <span class="toctext">Garbage Collection</span></a></li> <li class="toclevel-2 tocsection-26"><a href="#Properties"><span class="tocnumber">8.2</span> <span class="toctext">Properties</span></a></li> <li class="toclevel-2 tocsection-27"><a href="#Dot-Notation"><span class="tocnumber">8.3</span> <span class="toctext">Dot-Notation</span></a></li> <li class="toclevel-2 tocsection-28"><a href="#Schnelle_Enumeration"><span class="tocnumber">8.4</span> <span class="toctext">Schnelle Enumeration</span></a></li> </ul> </li> <li class="toclevel-1 tocsection-29"><a href="#Vergleich_zu_anderen_Programmiersprachen"><span class="tocnumber">9</span> <span class="toctext">Vergleich zu anderen Programmiersprachen</span></a> <ul> <li class="toclevel-2 tocsection-30"><a href="#C++"><span class="tocnumber">9.1</span> <span class="toctext">C++</span></a> <ul> <li class="toclevel-3 tocsection-31"><a href="#Funktionalitätserweiterung"><span class="tocnumber">9.1.1</span> <span class="toctext">Funktionalitätserweiterung</span></a></li> </ul> </li> </ul> </li> <li class="toclevel-1 tocsection-32"><a href="#Siehe_auch"><span class="tocnumber">10</span> <span class="toctext">Siehe auch</span></a></li> <li class="toclevel-1 tocsection-33"><a href="#Literatur"><span class="tocnumber">11</span> <span class="toctext">Literatur</span></a></li> <li class="toclevel-1 tocsection-34"><a href="#Weblinks"><span class="tocnumber">12</span> <span class="toctext">Weblinks</span></a></li> <li class="toclevel-1 tocsection-35"><a href="#Einzelnachweise"><span class="tocnumber">13</span> <span class="toctext">Einzelnachweise</span></a></li> </ul> </div> <div class="mw-heading mw-heading2"><h2 id="Geschichte">Geschichte</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Objective-C&veaction=edit&section=1" title="Abschnitt bearbeiten: Geschichte" class="mw-editsection-visualeditor"><span>Bearbeiten</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Objective-C&action=edit&section=1" title="Quellcode des Abschnitts bearbeiten: Geschichte"><span>Quelltext bearbeiten</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Objective-C wurde hauptsächlich von <a href="/wiki/Brad_Cox_(Informatiker)" title="Brad Cox (Informatiker)">Brad Cox</a> und <a href="/w/index.php?title=Tom_Love&action=edit&redlink=1" class="new" title="Tom Love (Seite nicht vorhanden)">Tom Love</a> in den 1980er Jahren bei <a href="/w/index.php?title=Productivity_Products_International&action=edit&redlink=1" class="new" title="Productivity Products International (Seite nicht vorhanden)">PPI</a>, später <a href="/w/index.php?title=Stepstone_(Unternehmen)&action=edit&redlink=1" class="new" title="Stepstone (Unternehmen) (Seite nicht vorhanden)">Stepstone</a>, entwickelt, später dann von <a href="/wiki/NeXT" title="NeXT">NeXT</a> in die <a href="/wiki/GNU_Compiler_Collection" title="GNU Compiler Collection">GNU Compiler Collection</a> integriert, um als Basis für <a href="/wiki/OPENSTEP" title="OPENSTEP">NeXTSTEP</a> zu dienen. </p><p>Auf der <a href="/wiki/Worldwide_Developers_Conference" title="Worldwide Developers Conference">Worldwide Developers Conference</a> 2006 gab Apple, das zwischenzeitlich NeXT aufgekauft hatte, die Freigabe von „Objective-C 2.0“ bekannt. Dieser Versionssprung wurde begründet mit zahlreichen tiefgreifenden Verbesserungen, u. a. ein modernes Speichermanagement (garbage collection), Syntax-Verbesserungen,<sup id="cite_ref-4" class="reference"><a href="#cite_note-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup> Laufzeit-Performance-Verbesserungen,<sup id="cite_ref-5" class="reference"><a href="#cite_note-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup> und Unterstützung für 64-Bit-Plattformen. </p> <div class="mw-heading mw-heading2"><h2 id="Wesentliche_Eigenschaften">Wesentliche Eigenschaften</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Objective-C&veaction=edit&section=2" title="Abschnitt bearbeiten: Wesentliche Eigenschaften" class="mw-editsection-visualeditor"><span>Bearbeiten</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Objective-C&action=edit&section=2" title="Quellcode des Abschnitts bearbeiten: Wesentliche Eigenschaften"><span>Quelltext bearbeiten</span></a><span class="mw-editsection-bracket">]</span></span></div> <figure class="mw-default-size" typeof="mw:File/Thumb"><a href="/wiki/Datei:Key-Value-Observing.png" class="mw-file-description"><img src="//upload.wikimedia.org/wikipedia/de/thumb/9/9b/Key-Value-Observing.png/220px-Key-Value-Observing.png" decoding="async" width="220" height="168" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/de/thumb/9/9b/Key-Value-Observing.png/330px-Key-Value-Observing.png 1.5x, //upload.wikimedia.org/wikipedia/de/thumb/9/9b/Key-Value-Observing.png/440px-Key-Value-Observing.png 2x" data-file-width="523" data-file-height="400" /></a><figcaption>Key-Value-Observing</figcaption></figure> <p>Einer der Leitgedanken beim Entwurf von Objective-C war es, sich der Flexibilität von Smalltalk anzunähern, jedoch auf das zu verzichten, was das Laufzeitverhalten verschlechtern könnte. Der offensichtlichste Verzicht gegenüber <a href="/wiki/Smalltalk_(Programmiersprache)" title="Smalltalk (Programmiersprache)">Smalltalk</a> ist das Fehlen von <a href="/wiki/Smalltalk_(Programmiersprache)#Blöcke" title="Smalltalk (Programmiersprache)">Blöcken</a>. Daher ist ein Objective-C-Programm bereits zur Übersetzungszeit vollständig kompilierbar. (Soweit zwischenzeitlich Blocks als Closures eingeführt wurden, ändert dies nichts, da es sich um bereits kompilierte Literale handelt.) </p><p>Viele Konzepte sind gar nicht in der Sprachdefinition selbst festgelegt, sondern werden erst durch das Framework, also etwa Cocoa oder GNUStep, ermöglicht. Insbesondere ist das gesamte Laufzeitsystem nicht im Compiler implementiert, sondern besteht aus C-Funktionen. In Objective-C wird bspw. beim Versenden einer Nachricht an ein Objekt die C-Funktion <code>objc_msg_send()</code> aufgerufen. Daher ist eine Darstellung ohne das entsprechende Laufzeitsystem kaum denkbar und nicht sinnvoll. Originäre Objective-C-Schlüsselwörter erkennt man indessen an dem vorangestellten <code>@</code>. </p> <div class="mw-heading mw-heading3"><h3 id="Dynamisches_Binden">Dynamisches Binden</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Objective-C&veaction=edit&section=3" title="Abschnitt bearbeiten: Dynamisches Binden" class="mw-editsection-visualeditor"><span>Bearbeiten</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Objective-C&action=edit&section=3" title="Quellcode des Abschnitts bearbeiten: Dynamisches Binden"><span>Quelltext bearbeiten</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Eine bemerkenswerte Eigenschaft von Objective-C ist das dynamische <a href="/wiki/Linker_(Computerprogramm)" title="Linker (Computerprogramm)">Binden</a> von Methoden. <a href="/wiki/Polymorphie_(Programmierung)" title="Polymorphie (Programmierung)">Polymorphie</a> ist im Gegensatz zu Sprachen, die auf <a href="/wiki/Simula" title="Simula">Simula-67</a> basieren, nicht nur innerhalb einer Klassenhierarchie möglich, sondern auch darüber hinaus. Eine Methode mit einem bestimmten Namen (Selector) kann von Objekten jeder <a href="/wiki/Klasse_(Objektorientierung)" title="Klasse (Objektorientierung)">Klasse</a> ausgeführt werden, die sie implementieren. Es ist nicht erforderlich, dass der Aufrufer die Klasse kennt oder die Methoden bereits in einer Basisklasse – wenn auch nur virtuell – definiert worden sind. </p> <div class="mw-heading mw-heading3"><h3 id="Dynamische_Typisierung_und_typloses_id">Dynamische Typisierung und typloses id</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Objective-C&veaction=edit&section=4" title="Abschnitt bearbeiten: Dynamische Typisierung und typloses id" class="mw-editsection-visualeditor"><span>Bearbeiten</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Objective-C&action=edit&section=4" title="Quellcode des Abschnitts bearbeiten: Dynamische Typisierung und typloses id"><span>Quelltext bearbeiten</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Es ist daher für den Absender nicht notwendig, die Klasse des Empfängers zu kennen. Vielmehr existiert ein Typ <code>id</code>, der für jedes Instanzobjekt jeder Klasse stehen kann. Analoges gilt für den Versand von Nachrichten an Klassenobjekte durch die Typisierung <code>Class</code>. Dabei sei aber erwähnt, dass zwar der Zeiger auf ein Instanzobjekt nicht typisiert ist, um spätes Binden zu ermöglichen. Die einzelnen Instanzen sind jedoch stets typisiert, gehören also genau einer Klasse an. Objective-C typisiert also streng, jedoch dynamisch. </p> <div class="mw-heading mw-heading3"><h3 id="Nachrichten">Nachrichten</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Objective-C&veaction=edit&section=5" title="Abschnitt bearbeiten: Nachrichten" class="mw-editsection-visualeditor"><span>Bearbeiten</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Objective-C&action=edit&section=5" title="Quellcode des Abschnitts bearbeiten: Nachrichten"><span>Quelltext bearbeiten</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>In Objective-C gibt es eine strikte Trennung von Nachrichten und Methoden. Man spricht daher eigentlich in Objective-C gar nicht von Methodenaufrufen. Vielmehr gibt es einen Nachrichtensender (Sender) und einen Nachrichtenempfänger (Receiver). Allein der Receiver entscheidet anhand der Nachricht, welche Methode ausgeführt wird. Dabei wird zunächst versucht, eine gleichnamige Methode zu finden. Es existiert dazu korrespondierend ein Datentyp <code>SEL</code> (Selector), der einen Nachrichtennamen abbildet. Zur vollständigen Nachricht fehlen dann noch die Parameter und der Empfänger. Es ist darüber hinaus möglich, Nachrichtennamen erst zur Laufzeit zu erstellen. </p><p>Hieraus ergibt sich die Möglichkeit, in einer IDE ganze Objektgraphen und Bedienungsoberflächen zu gestalten und zu verbinden, ohne dass die Eingabe von Sourcecode durch den Programmierer oder durch die IDE selbst erforderlich ist. Umgekehrt handelt es sich aber um das „normale“ Vorgehen des Dispatchers, sodass kein Aufsatz hierfür erforderlich ist und der Programmierer jederzeit die Kontrolle über die Ausführung jeder Methode behält.<sup id="cite_ref-6" class="reference"><a href="#cite_note-6"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup> In der Praxis entfällt damit ein Großteil der Programmierarbeit. </p> <div class="mw-heading mw-heading3"><h3 id="Kategorien">Kategorien</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Objective-C&veaction=edit&section=6" title="Abschnitt bearbeiten: Kategorien" class="mw-editsection-visualeditor"><span>Bearbeiten</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Objective-C&action=edit&section=6" title="Quellcode des Abschnitts bearbeiten: Kategorien"><span>Quelltext bearbeiten</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Kategorien sind Erweiterungen bereits bestehender Klassen um weitere Methoden. Hervorzuheben ist hierbei, dass die in den Kategorien enthaltenen Methoden auch Instanzen erweitern, die von fremdem Code erzeugt werden. Dies gilt auch dann, wenn der fremde Code die Kategorie gar nicht kennt. </p><p>Darüber hinaus verhält es sich so, dass diese Kategorie auch Instanzen hinzugefügt wird, die aus bestehendem Code stammen und daher die nachträglich hinzugefügte Kategorie gar nicht kennen. Wird also etwa in einem Framework, welches vor Jahren entwickelt wurde und dessen Sourcecode nicht vorliegt, eine Instanz von <code>NSNumber</code> erzeugt, so hat diese ebenfalls die vorgenannte Methode. Damit ist es möglich, vollständig fremden Klassen Methoden hinzuzufügen. </p> <div class="mw-heading mw-heading3"><h3 id="Protokolle">Protokolle</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Objective-C&veaction=edit&section=7" title="Abschnitt bearbeiten: Protokolle" class="mw-editsection-visualeditor"><span>Bearbeiten</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Objective-C&action=edit&section=7" title="Quellcode des Abschnitts bearbeiten: Protokolle"><span>Quelltext bearbeiten</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Ähnlich wie in <a href="/wiki/Java_(Programmiersprache)" title="Java (Programmiersprache)">Java</a> mit Interfaces lassen sich in Objective-C Sätze von Methoden in Protokollen zusammenfassen. </p> <div class="mw-heading mw-heading3"><h3 id="RTTI/Reflexion"><span id="RTTI.2FReflexion"></span>RTTI/Reflexion</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Objective-C&veaction=edit&section=8" title="Abschnitt bearbeiten: RTTI/Reflexion" class="mw-editsection-visualeditor"><span>Bearbeiten</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Objective-C&action=edit&section=8" title="Quellcode des Abschnitts bearbeiten: RTTI/Reflexion"><span>Quelltext bearbeiten</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Zur Laufzeit wird zu jedem Objekt, mittels <a href="/wiki/Runtime_Type_Information" title="Runtime Type Information">RTTI</a>, ein Verweis auf seinen Typ, also die Klasse, mitgeführt. Die Klasse enthält darüber hinaus eine Beschreibung aller Instanzvariablen und implementierten Methoden. Hieran entscheidet der Dispatcher im Receiver, welche Methode er der Nachricht zuordnet. Umgekehrt kann der Absender erfragen, welche Methoden implementiert sind. </p> <div class="mw-heading mw-heading3"><h3 id="Klassenobjekte">Klassenobjekte</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Objective-C&veaction=edit&section=9" title="Abschnitt bearbeiten: Klassenobjekte" class="mw-editsection-visualeditor"><span>Bearbeiten</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Objective-C&action=edit&section=9" title="Quellcode des Abschnitts bearbeiten: Klassenobjekte"><span>Quelltext bearbeiten</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>In Objective-C existieren nicht nur <a href="/wiki/Objekt_(Programmierung)" title="Objekt (Programmierung)">Instanzobjekte</a> (kurz: Instanzen), sondern auch Klassenobjekte. Die Bezeichnung „Exemplar einer Klasse“ ist daher in Objective-C mehrdeutig. Klassenobjekte können jedoch keine Member-Variablen enthalten und sind stets <a href="/wiki/Singleton_(Entwurfsmuster)" title="Singleton (Entwurfsmuster)">Singletons</a>. Klassenmethoden werden durch ein vorangestelltes <code>+</code> gekennzeichnet. Da es sich um Objekte handelt, können diese zugewiesen werden. Sie haben selbst den Typ <code>Class</code>. Es existiert eine Instanzmethode <code>-class</code> und eine Klassenmethode <code>+class</code>, um das Klassenobjekt zu erhalten. </p><p>Bemerkenswert ist in diesem Zusammenhang die Eigenschaft, dass es für diese Klassenobjekte einen <code>self</code>-Zeiger gibt, der der Polymorphie zugänglich ist. </p> <div class="mw-heading mw-heading2"><h2 id="Syntax">Syntax</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Objective-C&veaction=edit&section=10" title="Abschnitt bearbeiten: Syntax" class="mw-editsection-visualeditor"><span>Bearbeiten</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Objective-C&action=edit&section=10" title="Quellcode des Abschnitts bearbeiten: Syntax"><span>Quelltext bearbeiten</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Die <a href="/wiki/Syntax" title="Syntax">Syntax</a> von Objective-C erweitert die C-Syntax um objektorientierte Elemente. Diese Syntaxerweiterungen lehnen sich jedoch nicht an die C-Syntax an, sondern an die der Programmiersprache <a href="/wiki/Smalltalk_(Programmiersprache)" title="Smalltalk (Programmiersprache)">Smalltalk</a>. Der Hintergrund ist, dass der objektorientierte Aufsatz sich grundsätzlich auch mit anderen Programmiersprachen kombinieren lässt, etwa mit Pascal zu Objective-Pascal. Sämtliche neuen Schlüsselwörter sind mit einem voranstehenden @ gekennzeichnet. </p> <div class="mw-heading mw-heading3"><h3 id="Klassendefinition">Klassendefinition</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Objective-C&veaction=edit&section=11" title="Abschnitt bearbeiten: Klassendefinition" class="mw-editsection-visualeditor"><span>Bearbeiten</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Objective-C&action=edit&section=11" title="Quellcode des Abschnitts bearbeiten: Klassendefinition"><span>Quelltext bearbeiten</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Um seine eigene Art von Objekten zu erstellen, muss man sie in einer <a href="/wiki/Klasse_(Objektorientierung)" title="Klasse (Objektorientierung)">Klasse</a> beschreiben. Dazu wird im <code>@interface</code>-Teil – gewöhnlich in einer <a href="/wiki/Header-Datei" title="Header-Datei">Header-Datei</a> – die Klasse und deren Methoden definiert. </p> <div class="mw-heading mw-heading4"><h4 id="Klassenbezeichnung_und_Vererbung">Klassenbezeichnung und Vererbung</h4><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Objective-C&veaction=edit&section=12" title="Abschnitt bearbeiten: Klassenbezeichnung und Vererbung" class="mw-editsection-visualeditor"><span>Bearbeiten</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Objective-C&action=edit&section=12" title="Quellcode des Abschnitts bearbeiten: Klassenbezeichnung und Vererbung"><span>Quelltext bearbeiten</span></a><span class="mw-editsection-bracket">]</span></span></div> <div class="mw-highlight mw-highlight-lang-objc mw-content-ltr" dir="ltr"><pre><span></span><span class="k">@interface</span> <span class="nc">Bruch</span> : <span class="bp">NSObject</span><span class="w"> </span><span class="o"><</span><span class="n">Protokoll0</span><span class="p">,</span><span class="w"> </span><span class="n">Protokoll1</span><span class="o">></span> </pre></div> <p>Jede Klasse hat einen Namen, der konventionsgemäß mit einem Großbuchstaben beginnt und im <a href="/wiki/Binnenmajuskel" title="Binnenmajuskel">CamelCase</a> fortgeführt wird. Die Bezeichner folgen den C-Regeln, dürfen also insbesondere keine Umlaute enthalten. Durch einen Doppelpunkt getrennt wird sodann die Basisklasse angegeben. Schließlich können in spitzen Klammern Protokolle angegeben werden, deren Implementierung versprochen wird. Handelt es sich um mehrere Protokolle, so sind deren Namen in den Klammern mit Kommata getrennt aufzulisten. </p> <div class="mw-heading mw-heading4"><h4 id="Instanzvariablen">Instanzvariablen</h4><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Objective-C&veaction=edit&section=13" title="Abschnitt bearbeiten: Instanzvariablen" class="mw-editsection-visualeditor"><span>Bearbeiten</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Objective-C&action=edit&section=13" title="Quellcode des Abschnitts bearbeiten: Instanzvariablen"><span>Quelltext bearbeiten</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Es folgt in geschweiften Klammern die Liste der Instanzvariablen. </p> <div class="mw-highlight mw-highlight-lang-objc mw-content-ltr" dir="ltr"><pre><span></span><span class="p">{</span> <span class="w"> </span><span class="n">NSInteger</span><span class="w"> </span><span class="n">zaehler</span><span class="p">;</span> <span class="w"> </span><span class="n">NSInteger</span><span class="w"> </span><span class="n">nenner</span><span class="p">;</span> <span class="p">}</span> </pre></div> <p>Diese werden für jede Instanz angelegt. Die Sichtbarkeit lässt sich über Abschnitte mit @public, @private, @protected und @package (nur bei 64-Bit-Laufzeitsystem) steuern. @public bedeutet hierbei, dass jeder auf diese Instanzvariable zugreifen darf, @protected, dass dies nur im Code derselben Klasse oder abgeleiteten Klassen erfolgen darf, @private, dass dies nur in derselben Klasse erfolgen darf und @package, dass dies nur in Klassen des Frameworks erfolgen darf. Standard ist @protected, welches wegen anderer Technologien tatsächlich fast immer verwendet wird. Daher enthalten die allermeisten Klassendefinitionen keines der Schlüsselwörter zur Sichtbarkeit. </p> <div class="mw-heading mw-heading4"><h4 id="Properties_(Eigenschaften)"><span id="Properties_.28Eigenschaften.29"></span>Properties (Eigenschaften)</h4><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Objective-C&veaction=edit&section=14" title="Abschnitt bearbeiten: Properties (Eigenschaften)" class="mw-editsection-visualeditor"><span>Bearbeiten</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Objective-C&action=edit&section=14" title="Quellcode des Abschnitts bearbeiten: Properties (Eigenschaften)"><span>Quelltext bearbeiten</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Nach den Instanzvariablen ist es seit Objective-C 2 möglich, Eigenschaften (Attribute oder Beziehungen) aufzulisten. Die Definition einer Property hat die Form </p> <div class="mw-highlight mw-highlight-lang-objc mw-content-ltr" dir="ltr"><pre><span></span><span class="k">@property</span><span class="p">(</span><span class="w"> </span><span class="n">Attributliste</span><span class="w"> </span><span class="p">)</span><span class="w"> </span><span class="n">Typ</span><span class="w"> </span><span class="n">name</span><span class="p">;</span> </pre></div> <p>Die Attribute lassen sich hinsichtlich des Schreibschutzes, des Referenzmodelles und der Atomarität unterscheiden. </p> <ul><li>Für den Schreibschutz existieren die Attribute readonly und readwrite (Default)</li> <li>Atomarität: Durch das Attribut „<i>nonatomic</i>“ wird der Zugriff auf die Eigenschaft für Singlethread-Nutzung optimiert. Standardmäßig sind Eigenschaften sicher für die Verwendung in Multithread-Umgebungen, um diese Eigenschaft explizit festzulegen, wird das entgegengesetzte Attribut „<i>atomic</i>“ angegeben.<sup id="cite_ref-7" class="reference"><a href="#cite_note-7"><span class="cite-bracket">[</span>7<span class="cite-bracket">]</span></a></sup></li> <li>Die Referenzierung wird über die Wörter „<i>assign</i>“ (Default) als reine Zuweisung im Setter auch dann, wenn der Typ der Property ein Instanzzeiger ist, „<i>retain</i>“ als Referenz im Sinne des Reference-Countings (der Parameter erhält die Nachricht „<i>retain</i>“) und „<i>copy</i>“, wenn der Setter eine Kopie anfertigen soll (der Parameter erhält die Nachricht „<i>copy</i>“), beschrieben.</li></ul> <p>Werden nur Default-Eigenschaften verwendet, so kann die Attributliste samt Klammer weggelassen werden: </p> <div class="mw-highlight mw-highlight-lang-objc mw-content-ltr" dir="ltr"><pre><span></span><span class="k">@property</span><span class="w"> </span><span class="n">NSInteger</span><span class="w"> </span><span class="n">zaehler</span><span class="p">;</span> </pre></div> <p>Wird jedoch der Code mit <a href="/wiki/Referenzz%C3%A4hlung" title="Referenzzählung">Referenzzählung</a> als Speichermodell übersetzt und soll eine Eigenschaft mittels assign nur zugewiesen werden, so muss dies, obwohl voreingestellt, explizit angegeben werden. Ansonsten warnt der Compiler. Es bietet sich generell an, bei Instanzenzeigern explizit das Referenzmodell anzugeben, während es bei C-Typen überflüssig ist, da nur assign sinnvoll ist. </p> <div class="mw-highlight mw-highlight-lang-objc mw-content-ltr" dir="ltr"><pre><span></span><span class="k">@property</span><span class="w"> </span><span class="n">NSInteger</span><span class="w"> </span><span class="n">zaehler</span><span class="p">;</span><span class="w"> </span><span class="c1">// NSInteger ist ein C-Typ.</span> <span class="k">@property</span><span class="p">(</span><span class="w"> </span><span class="k">copy</span><span class="w"> </span><span class="p">)</span><span class="w"> </span><span class="bp">NSString</span><span class="o">*</span><span class="w"> </span><span class="n">name</span><span class="p">;</span><span class="w"> </span><span class="c1">// NSString* ist ein Instanzzeiger.</span> </pre></div> <div class="mw-heading mw-heading4"><h4 id="Methodendeklarationen">Methodendeklarationen</h4><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Objective-C&veaction=edit&section=15" title="Abschnitt bearbeiten: Methodendeklarationen" class="mw-editsection-visualeditor"><span>Bearbeiten</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Objective-C&action=edit&section=15" title="Quellcode des Abschnitts bearbeiten: Methodendeklarationen"><span>Quelltext bearbeiten</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Als Nächstes folgt eine Liste von Methoden: </p> <div class="mw-highlight mw-highlight-lang-objc mw-content-ltr" dir="ltr"><pre><span></span><span class="p">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span> <span class="nf">printLn</span><span class="p">;</span> <span class="p">-</span> <span class="p">(</span><span class="kt">float</span><span class="p">)</span> <span class="nf">floatValue</span><span class="p">;</span> </pre></div> <p>Jede einzelne Methodendeklaration beginnt zunächst mit einem ‚<code>+</code>‘ (Klassenmethode) oder ‚<code>-</code>‘ (Instanzmethode). Hiernach folgt in Klammern der Typ des Rückgabewertes, wobei wie in C void als Schlüsselwort für keinen Rückgabewert steht. Anschließend folgt der Methodenname, wobei wieder die Regeln für C-Bezeichner gelten. </p><p>Soll die Methode einen Parameter enthalten, so folgt als Teil des Bezeichners die äußere Beschreibung des ersten Parameters, darauf ein Doppelpunkt, in Klammern der Typ und sodann ein Bezeichner. Folgen weitere Parameter, so werden diese nach einem Leerzeichen wieder mit einem beschreibenden Namen versehen (der auch 0 Zeichen haben kann), worauf wieder ein Doppelpunkt, in Klammern der Typ und sodann ein Bezeichner folgen: </p> <div class="mw-highlight mw-highlight-lang-objc mw-content-ltr" dir="ltr"><pre><span></span><span class="p">-</span> <span class="p">(</span><span class="kt">id</span><span class="p">)</span><span class="nf">initWithZaehler:</span><span class="p">(</span><span class="n">NSInteger</span><span class="p">)</span><span class="nv">zaehler</span><span class="w"> </span><span class="nf">andNenner:</span><span class="p">(</span><span class="n">NSInteger</span><span class="p">)</span><span class="nv">nenner</span><span class="p">;</span> </pre></div> <p>Abgeschlossen wird die Deklaration mit einem Semikolon. </p><p>Die Klassendefinition wird mit @end abgeschlossen. </p> <div class="mw-heading mw-heading4"><h4 id="Implementierung">Implementierung</h4><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Objective-C&veaction=edit&section=16" title="Abschnitt bearbeiten: Implementierung" class="mw-editsection-visualeditor"><span>Bearbeiten</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Objective-C&action=edit&section=16" title="Quellcode des Abschnitts bearbeiten: Implementierung"><span>Quelltext bearbeiten</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Die Implementierung steht üblicherweise in einer weiteren Datei, die standardmäßig auf .m endet (Eselsbrücke: iMplementation oder Module). Sie beginnt mit @implementation und endet mit einem @end. Dazwischen werden die Methoden implementiert – gleichgültig, ob im Interface bekannt gemacht oder nicht. Dabei sind Standardmethoden und synthetisierte Methoden (nur Objective-C 2) für Eigenschaften (siehe oben) zu unterscheiden, Standardmethoden entsprechen in ihrem Kopf der Methodendeklaration. Jedoch tritt an die Stelle des Semikolons (das jedoch optional bleibt, unüblich!) die Anweisungsliste in geschweiften Klammern: </p> <div class="mw-highlight mw-highlight-lang-objc mw-content-ltr" dir="ltr"><pre><span></span><span class="p">-</span> <span class="p">(</span><span class="kt">id</span><span class="p">)</span><span class="nf">initWithZaehler:</span><span class="p">(</span><span class="n">NSInteger</span><span class="p">)</span><span class="nv">zaehler</span><span class="w"> </span><span class="nf">andNenner:</span><span class="p">(</span><span class="n">NSInteger</span><span class="p">)</span><span class="nv">nenner</span> <span class="p">{</span> <span class="w"> </span><span class="c1">// Code hier</span> <span class="p">}</span> </pre></div> <p>Es sei darauf hingewiesen, dass die Bezeichner der formalen Parameter nicht denen aus der Methodendeklaration entsprechen müssen. Synthetisierte Methoden sind die <a href="/wiki/Zugriffsfunktion" title="Zugriffsfunktion">Zugriffsmethoden</a> für die Eigenschaften: </p> <div class="mw-highlight mw-highlight-lang-objc mw-content-ltr" dir="ltr"><pre><span></span><span class="k">@synthesize</span><span class="w"> </span><span class="n">zaehler</span><span class="p">,</span><span class="w"> </span><span class="n">nenner</span><span class="p">;</span> </pre></div> <p>Es werden dann Zugriffsmethoden für die im Interface angegebenen Attribute erzeugt. Standardmäßig verwendet der Compiler dabei gleichnamige Instanzvariablen. Dem Programmierer bleibt es aber vorbehalten, selbst diese Methoden auszuformulieren, wobei diese den Namen <i>eigenschaft</i> und set<i>Eigenschaft</i> (nur bei readwrite) tragen müssen: </p> <div class="mw-highlight mw-highlight-lang-objc mw-content-ltr" dir="ltr"><pre><span></span><span class="p">-</span> <span class="p">(</span><span class="n">NSInteger</span><span class="p">)</span><span class="nf">zaehler</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">zaehler</span><span class="p">;</span><span class="w"> </span><span class="p">}</span> <span class="p">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">setZaehler:</span><span class="p">(</span><span class="n">NSInteger</span><span class="p">)</span><span class="nv">value</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="n">zaehler</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">value</span><span class="p">;</span><span class="w"> </span><span class="p">}</span> </pre></div> <p>Eine weitere Möglichkeit besteht darin, dass man eine Eigenschaft mittels @dynamic bezeichnet. In diesem Falle überprüft der Compiler nicht mehr das Vorhandensein in der Implementierung. Man kann also die entsprechenden Methoden zur Laufzeit simulieren oder selbst der Klasse hinzufügen: </p> <div class="mw-highlight mw-highlight-lang-objc mw-content-ltr" dir="ltr"><pre><span></span><span class="k">@dynamic</span><span class="w"> </span><span class="n">zaehler</span><span class="p">;</span><span class="w"> </span><span class="c1">// Zugriffsmethoden werden zur Laufzeit gehandhabt.</span> </pre></div> <div class="mw-heading mw-heading3"><h3 id="Nachrichten_2">Nachrichten</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Objective-C&veaction=edit&section=17" title="Abschnitt bearbeiten: Nachrichten" class="mw-editsection-visualeditor"><span>Bearbeiten</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Objective-C&action=edit&section=17" title="Quellcode des Abschnitts bearbeiten: Nachrichten"><span>Quelltext bearbeiten</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Da Objective-C zwischen <a href="/wiki/Nachricht" title="Nachricht">Nachricht</a> und Methode unterscheidet, wird für das Versenden von Nachrichten keine an den C-Funktionsaufruf angelehnte Syntax verwendet. Vielmehr erfolgt der Versand in der Form: </p> <div class="mw-highlight mw-highlight-lang-objc mw-content-ltr" dir="ltr"><pre><span></span><span class="p">[</span><span class="n">Empfänger</span><span class="w"> </span><span class="n">Nachricht</span><span class="p">]</span> </pre></div> <p>Soll eine Nachricht an ein Klassenobjekt verschickt werden, damit eine Klassenmethode ausgeführt wird, so schreibt man einfach die Klasse als Empfänger hin: </p> <div class="mw-highlight mw-highlight-lang-objc mw-content-ltr" dir="ltr"><pre><span></span><span class="n">Bruch</span><span class="o">*</span><span class="w"> </span><span class="n">bruch</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="n">Bruch</span><span class="w"> </span><span class="n">alloc</span><span class="p">];</span><span class="w"> </span><span class="c1">// +alloc ist Klassenmethode</span> </pre></div> <p>Bei Nachrichten an die Instanzmethode wird deren Zeiger verwendet: <code>[bruch initWithZaehler:3 andNenner:4];</code> Wie ersichtlich, werden dabei die Parameter eingesetzt und mittels Leerzeichen, nicht Komma, getrennt. Nachrichten können auch verschachtelt werden. Z. B. </p> <div class="mw-highlight mw-highlight-lang-objc mw-content-ltr" dir="ltr"><pre><span></span><span class="bp">NSString</span><span class="w"> </span><span class="o">*</span><span class="n">string</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">@"Hallo Welt"</span><span class="p">;</span> <span class="bp">NSData</span><span class="w"> </span><span class="o">*</span><span class="n">data</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="bp">NSData</span><span class="w"> </span><span class="n">dataWithBytes</span><span class="o">:</span><span class="p">[</span><span class="n">string</span><span class="w"> </span><span class="n">cString</span><span class="p">]</span><span class="w"> </span><span class="n">length</span><span class="o">:</span><span class="p">[</span><span class="n">string</span><span class="w"> </span><span class="n">cStringLength</span><span class="p">]];</span> </pre></div> <p>Hiermit wird ein neues Objekt der Klasse <code>NSData</code> erstellt. Die Bytes, die in das neue Objekt kopiert werden, werden mit <code>[string cString]</code> erfragt, die Länge des Blocks mit <code>[string cStringLength]</code>. </p><p>Es werden also die Rückgabewerte der Methoden verwendet. Dies geht auch beim Empfänger, zum Beispiel: </p> <div class="mw-highlight mw-highlight-lang-objc mw-content-ltr" dir="ltr"><pre><span></span><span class="n">Bruch</span><span class="o">*</span><span class="w"> </span><span class="n">bruch</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[[</span><span class="n">Bruch</span><span class="w"> </span><span class="n">alloc</span><span class="p">]</span><span class="w"> </span><span class="n">init</span><span class="p">]</span> </pre></div> <p>Das Objekt, das mit <code>[Klasse alloc]</code> erzeugt wurde, bekommt die Botschaft <code>init</code>. </p> <div class="mw-heading mw-heading3"><h3 id="Locking">Locking</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Objective-C&veaction=edit&section=18" title="Abschnitt bearbeiten: Locking" class="mw-editsection-visualeditor"><span>Bearbeiten</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Objective-C&action=edit&section=18" title="Quellcode des Abschnitts bearbeiten: Locking"><span>Quelltext bearbeiten</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Objective-C bietet eine Syntax für Locks bei Threading an. Hierzu wird ein Code-Abschnitt mit dem Schlüsselwort <code>@synchronized</code> eingeleitet, welches als Parameter ein Objekt als Lock erhält: </p> <div class="mw-highlight mw-highlight-lang-objc mw-content-ltr" dir="ltr"><pre><span></span><span class="k">@synchronized</span><span class="p">(</span><span class="w"> </span><span class="n">anInstance</span><span class="w"> </span><span class="p">)</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="c1">// Exklusiver Code für den Lock anInstance</span> <span class="p">}</span> </pre></div> <div class="mw-heading mw-heading3"><h3 id="Exceptions">Exceptions</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Objective-C&veaction=edit&section=19" title="Abschnitt bearbeiten: Exceptions" class="mw-editsection-visualeditor"><span>Bearbeiten</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Objective-C&action=edit&section=19" title="Quellcode des Abschnitts bearbeiten: Exceptions"><span>Quelltext bearbeiten</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Exceptionhandling erfolgt in Objective-C mittels <code>@try, @catch, @finally</code> und <code>@throw</code>; </p><p>Geworfen wird eine Exception – unmittelbar mit Sprachmitteln – mittels des Schlüsselwortes <code>@throw</code>; Durch Angaben verschiedener Klassen kann man sowohl auf derselben Ebene wie auch in Hierarchien bestimmt werden, welcher Klasse eine Exception sein soll, die gefangen wird. Im <code>@catch</code>-Block kann die Exception erneut geworfen werden und wird dann von einem äußeren Exceptionhandler behandelt. </p> <div class="mw-heading mw-heading2"><h2 id="Klassenobjekt">Klassenobjekt</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Objective-C&veaction=edit&section=20" title="Abschnitt bearbeiten: Klassenobjekt" class="mw-editsection-visualeditor"><span>Bearbeiten</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Objective-C&action=edit&section=20" title="Quellcode des Abschnitts bearbeiten: Klassenobjekt"><span>Quelltext bearbeiten</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Objective-C besitzt so genannte Klassenobjekte. Nicht nur die Instanzen, sondern auch die Klassen sind Objekte und können Nachrichten empfangen, wie oben <code>[<i>Klasse</i> alloc]</code>. – Zum Instanziieren sind damit keine zusätzlichen Sprachelemente wie Konstruktoren und Schlüsselwörter nötig. </p><p>In der Klassendefinition werden Klassenmethoden mit ‚<code>+</code>‘, Instanzmethoden mit ‚<code>-</code>‘ gekennzeichnet. </p><p><code>+alloc</code> ist kein Bestandteil der Sprachbeschreibung, sondern eine – beliebige – Methode des Frameworks und daher der eigenen Implementierung zugänglich. Die Methode zu überschreiben ist jedoch nur für Experten eine gute Idee. Ganz im Gegensatz dazu ist die Methode <code>+initialize</code>, die vor Verwendung einer Klasse aufgerufen wird, standardmäßig leer und kann für klassenbezogene Vorauseinstellungen überschrieben werden. </p> <div class="mw-heading mw-heading2"><h2 id="Typkonzept">Typkonzept</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Objective-C&veaction=edit&section=21" title="Abschnitt bearbeiten: Typkonzept" class="mw-editsection-visualeditor"><span>Bearbeiten</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Objective-C&action=edit&section=21" title="Quellcode des Abschnitts bearbeiten: Typkonzept"><span>Quelltext bearbeiten</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Objective-C fügt zu den Standard-C-Datentypen den Datentyp id hinzu. Ein Objekt des Types id ist irgendein Objekt. Was mit diesem Objekt angefangen werden kann, wird erst zur Laufzeit bestimmt. Hierzu existieren Methoden, etwas über das Objekt zu erfahren. Wichtig sind: </p> <div class="mw-highlight mw-highlight-lang-objc mw-content-ltr" dir="ltr"><pre><span></span><span class="p">[</span><span class="n">obj</span><span class="w"> </span><span class="k">class</span><span class="p">]</span><span class="w"> </span><span class="c1">// bestimmt die Klasse</span> </pre></div> <div class="mw-highlight mw-highlight-lang-objc mw-content-ltr" dir="ltr"><pre><span></span><span class="p">[</span><span class="n">obj</span><span class="w"> </span><span class="n">respondsToSelector</span><span class="o">:</span><span class="p">]</span><span class="w"> </span><span class="c1">// bestimmt, ob eine Methode vorhanden ist</span> </pre></div> <div class="mw-highlight mw-highlight-lang-objc mw-content-ltr" dir="ltr"><pre><span></span><span class="p">[</span><span class="n">obj</span><span class="w"> </span><span class="n">conformsToProtocol</span><span class="o">:</span><span class="p">]</span><span class="w"> </span><span class="c1">// bestimmt, ob ein Protokoll implementiert ist</span> </pre></div> <p>Das Typkonzept erlaubt zudem die Typisierung des allgemeinen Objektes oder anderer Objekte durch (formale) Protokolle. Diese legen einen Satz von Methoden fest. Auch diese Protokolle müssen nicht in einem Hierarchiebaum einheitlich sein, werden aber vererbt. </p><p>Die Typfreiheit erlaubt die Erstellung allgemeiner Container, die im Unterschied zu generischen Containern in Sprachen wie C++ und Java auch typgemischt (heterogen) sein können. </p> <div class="mw-heading mw-heading2"><h2 id="Spätes_Binden"><span id="Sp.C3.A4tes_Binden"></span>Spätes Binden</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Objective-C&veaction=edit&section=22" title="Abschnitt bearbeiten: Spätes Binden" class="mw-editsection-visualeditor"><span>Bearbeiten</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Objective-C&action=edit&section=22" title="Quellcode des Abschnitts bearbeiten: Spätes Binden"><span>Quelltext bearbeiten</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Objective-C bindet einen Methodenaufruf erst zur Laufzeit an eine Methode. Grundsätzlich ist dies auch in C++ so. Jedoch muss in C++ bereits zur Übersetzungszeit sichergestellt sein, dass eine Methode existiert, weil sie zu der Klassenhierarchie gehört. C++ ist also nur bereit, innerhalb eines Zweiges einer Hierarchie spät zu binden, während Objective-C dies unabhängig von der Stellung einer Klasse in einem Hierarchiebaum macht. Dies soll an einem Syntax-neutralen Beispiel verdeutlicht werden: </p> <div class="mw-highlight mw-highlight-lang-objc mw-content-ltr" dir="ltr"><pre><span></span><span class="w"> </span><span class="n">Klasse</span><span class="w"> </span><span class="n">A</span> <span class="w"> </span><span class="n">methode</span><span class="p">()</span> <span class="w"> </span><span class="n">Klasse</span><span class="w"> </span><span class="n">B</span><span class="w"> </span><span class="n">von</span><span class="w"> </span><span class="n">Klasse</span><span class="w"> </span><span class="n">A</span> <span class="w"> </span><span class="n">methode</span><span class="p">()</span> <span class="w"> </span><span class="n">Klasse</span><span class="w"> </span><span class="n">C</span> <span class="w"> </span><span class="n">methode</span><span class="p">()</span> <span class="w"> </span><span class="p">...</span> </pre></div> <p>Zu diesem Zweck führt Objective-C zur Laufzeit umfangreiche Informationen über ein Objekt mit, was über <a href="/wiki/Runtime_Type_Information" title="Runtime Type Information">RTTI</a> hinausgeht. Aus dem letztlich gleichen Grunde ist es auch ohne weiteres möglich, zur Laufzeit erst eine Methode zu bestimmen. Die Methode kann sich ähnlich wie bei einem Methodenzeiger in einer Variablen befinden, die erst zur Laufzeit mit einem Wert besetzt wird. </p><p>Von dieser Technik macht etwa Cocoa bei der Bindung von Interface-Elementen an Methoden regen Gebrauch. Die Bestimmung der Methode kann auch durch ihren Klarnamen erfolgen. </p><p><b>Programmbeispiel</b> </p> <div class="mw-highlight mw-highlight-lang-objc mw-content-ltr" dir="ltr"><pre><span></span><span class="bp">NSMutableDictionary</span><span class="w"> </span><span class="o">*</span><span class="n">aDictionary</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[[</span><span class="bp">NSMutableDictionary</span><span class="w"> </span><span class="n">alloc</span><span class="p">]</span><span class="w"> </span><span class="n">init</span><span class="p">];</span> <span class="p">[</span><span class="n">aDictionary</span><span class="w"> </span><span class="n">setObject</span><span class="o">:</span><span class="w"> </span><span class="s">@"foo"</span><span class="w"> </span><span class="n">forKey</span><span class="o">:</span><span class="w"> </span><span class="s">@"Foo"</span><span class="p">];</span> <span class="p">[</span><span class="n">aDictionary</span><span class="w"> </span><span class="n">setObject</span><span class="o">:</span><span class="w"> </span><span class="s">@"bar"</span><span class="w"> </span><span class="n">forKey</span><span class="o">:</span><span class="w"> </span><span class="s">@"Bar"</span><span class="p">];</span> <span class="p">[</span><span class="n">aDictionary</span><span class="w"> </span><span class="n">setObject</span><span class="o">:</span><span class="w"> </span><span class="s">@"Hallo Welt!"</span><span class="w"> </span><span class="n">forKey</span><span class="o">:</span><span class="w"> </span><span class="s">@"Hello, world!"</span><span class="p">];</span> <span class="n">NSLog</span><span class="p">([</span><span class="n">aDictionary</span><span class="w"> </span><span class="n">objectForKey</span><span class="o">:</span><span class="w"> </span><span class="s">@"Hello, world!"</span><span class="p">]);</span> <span class="p">[</span><span class="n">aDictionary</span><span class="w"> </span><span class="k">release</span><span class="p">];</span> </pre></div> <p>Ausgabe: <code>Hallo Welt!</code> </p> <div class="mw-heading mw-heading2"><h2 id="Objective-C++"><span id="Objective-C.2B.2B"></span>Objective-C++</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Objective-C&veaction=edit&section=23" title="Abschnitt bearbeiten: Objective-C++" class="mw-editsection-visualeditor"><span>Bearbeiten</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Objective-C&action=edit&section=23" title="Quellcode des Abschnitts bearbeiten: Objective-C++"><span>Quelltext bearbeiten</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Objective-C++ ist ein Frontend der <a href="/wiki/GNU_Compiler_Collection" title="GNU Compiler Collection">GNU Compiler Collection</a> sowie LLVM/<a href="/wiki/Clang" title="Clang">Clang</a>, das Quellen übersetzen kann, die sowohl C++- als auch Objective-C-Syntax verwenden. Objective-C++ versucht nicht, die unterschiedlichen Konzepte der beiden Sprachen zu vereinheitlichen. Vielmehr erweitert es lediglich C++ um die Erweiterungen, die Objective-C zu C hinzufügt. Dies führt zu gewissen Einschränkungen: </p> <ul><li>C++-Klassen können nicht von Objective-C-Klassen erben.</li> <li>Umgekehrt können Objective-C-Klassen auch nicht von C++-Klassen erben.</li> <li>Innerhalb einer Objective-C-Deklaration kann man keine C++-<a href="/wiki/Namensraum" title="Namensraum">Namensräume</a> deklarieren.</li> <li>C++-Klassen, die keinen <a href="/wiki/Konstruktoren_und_Destruktoren" title="Konstruktoren und Destruktoren">Defaultkonstruktor</a> haben, oder die <a href="/wiki/Virtuelle_Methode" title="Virtuelle Methode">virtuelle Funktionen</a> haben, können nicht als Instanzvariablen einer Objective-C-Klasse verwendet werden. Wohl aber kann man Zeiger auf solche Klassen verwenden.</li> <li>Objective-C-Objekte können nicht als <a href="/wiki/Wertparameter" title="Wertparameter">Wertparameter</a> verwendet werden, da sie nur über Zeiger ansprechbar sind.</li> <li>Objective-C-Deklarationen können nicht in C++-<a href="/wiki/Template_(C%2B%2B)" title="Template (C++)">Template</a>-Deklarationen benutzt werden, und umgekehrt. Jedoch können Objective-C-Typen (wie z. B. Klassenname *) als C++-Template-Parameter benutzt werden.</li> <li>Die <a href="/wiki/Ausnahmebehandlung" title="Ausnahmebehandlung">Ausnahmebehandlungsmechanismen</a> von Objective-C und C++ sind voneinander unabhängig; Ein Objective-C-Exception-Handler kann keine C++-Exceptions auffangen und umgekehrt. Dies gilt allerdings nicht mehr für die "modern runtime" von Objective-C 2.0 (iOS oder 64-Bit Mac), da hier das Exceptionkonzept von C++ übernommen wurde.</li> <li>Besondere Vorsicht erfordert die Tatsache, dass die Konventionen zum Aufruf von Destruktoren nicht kompatibel sind. So wird etwa ein C++-Destruktor nicht aufgerufen, wenn der Gültigkeitsbereich des C++-Objekts mittels einer Objective-C-Ausnahme verlassen wird. Dies gilt allerdings nicht mehr für die „modern runtime“ von Objective-C 2.0 (iOS oder 64-Bit Mac), da hier das Exceptionkonzept von C++ übernommen wurde.</li></ul> <p>Ein typischer Anwendungsbereich von Objective-C++ ist zum Beispiel die Verwendung einer C++-Bibliothek in einer Objective-C-Anwendung. </p> <div class="mw-heading mw-heading2"><h2 id="Objective-C_2.0">Objective-C 2.0</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Objective-C&veaction=edit&section=24" title="Abschnitt bearbeiten: Objective-C 2.0" class="mw-editsection-visualeditor"><span>Bearbeiten</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Objective-C&action=edit&section=24" title="Quellcode des Abschnitts bearbeiten: Objective-C 2.0"><span>Quelltext bearbeiten</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Im Oktober 2007 hat Apple mit <a href="/wiki/Mac_OS_X_Leopard" title="Mac OS X Leopard">Mac OS X Leopard</a> <b>Objective-C 2.0</b> ausgeliefert, eine Erweiterung von Objective-C, die „moderne Garbage Collection, Syntaxerweiterungen, Verbesserungen der Laufzeitleistung und 64-Bit-Unterstützung umfasst“.<sup id="cite_ref-8" class="reference"><a href="#cite_note-8"><span class="cite-bracket">[</span>8<span class="cite-bracket">]</span></a></sup> </p><p>Die GNU Laufzeitumgebung für Objective-C unterstützt diese Erweiterungen seit <a href="/wiki/GNU_Compiler_Collection" title="GNU Compiler Collection">GCC</a> 4.6. </p> <div class="mw-heading mw-heading3"><h3 id="Garbage_Collection">Garbage Collection</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Objective-C&veaction=edit&section=25" title="Abschnitt bearbeiten: Garbage Collection" class="mw-editsection-visualeditor"><span>Bearbeiten</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Objective-C&action=edit&section=25" title="Quellcode des Abschnitts bearbeiten: Garbage Collection"><span>Quelltext bearbeiten</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>GNUstep hat in alten Versionen den Garbage Collector von Hans Boehm unterstützt, dieser ist jedoch inkompatibel zu Apples Implementierung. Leopard und GNUstep enthalten einen optionalen konservativen <a href="/wiki/Garbage_Collection" title="Garbage Collection">Garbage Collector</a> für Objective-C 2.0. </p> <div class="mw-heading mw-heading3"><h3 id="Properties">Properties</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Objective-C&veaction=edit&section=26" title="Abschnitt bearbeiten: Properties" class="mw-editsection-visualeditor"><span>Bearbeiten</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Objective-C&action=edit&section=26" title="Quellcode des Abschnitts bearbeiten: Properties"><span>Quelltext bearbeiten</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Objective-C 2.0 führt eine neue Syntax ein, mit der man Instanzvariablen als <i>Properties</i> deklarieren kann. Die Syntax unterstützt optionale Attribute, welche die Zugriffsmethoden näher definieren: Eine Property kann als <code>readonly</code> deklariert werden, und kann mit verschiedenen Verhaltensregeln zur Speicherverwaltung wie <code>assign</code>, <code>copy</code> oder <code>retain</code> versehen werden. </p><p>Properties werden mit dem Schlüsselwort <code>@synthesize</code> implementiert, welches <i>Getter</i> und <i>Setter</i>-Methoden gemäß der Property-Deklaration erzeugt. Alternativ kann man auch das Schlüsselwort <code>@dynamic</code> verwenden, um anzuzeigen, dass man diese Methoden selber implementiert. Im Falle des folgenden Beispiels ist es jedoch optional, da der Compiler die Implementierung der Akzessoren bemerkt. Wichtiger ist das Schlüsselwort <code>@dynamic</code>, wenn die Akzessoren erst zur Laufzeit erzeugt werden. Denn hier würde der Compiler eine entsprechende Definition vermissen und eine Warnung ausgeben. Dies ist etwa bei <i>Managed Objects</i> der Fall, die zur Laufzeit Akzessoren aus der geladenen Beschreibungsstruktur der Entität erzeugen. </p> <div class="mw-heading mw-heading3"><h3 id="Dot-Notation">Dot-Notation</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Objective-C&veaction=edit&section=27" title="Abschnitt bearbeiten: Dot-Notation" class="mw-editsection-visualeditor"><span>Bearbeiten</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Objective-C&action=edit&section=27" title="Quellcode des Abschnitts bearbeiten: Dot-Notation"><span>Quelltext bearbeiten</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Auf Akzessoren, gleichgültig ob explizit definiert oder über eine Property angelegt, kann mit der aus anderen Sprachen bekannten Punkt-Notation zugegriffen werden. </p><p>Hierbei erfolgt allerdings kein unkontrollierter Zugriff auf die Instanzvariable, sondern es werden die Akzessoren -eigenschaft und set- Eigenschaft verwendet. </p><p>Um die Punktnotation innerhalb einer Instanzmethode zu verwenden, benutzt man das Schlüsselwort <i>self</i>. Auf die Eigenschaften einer Instanz kann auch dynamisch per <a href="/wiki/Reflexion_(Programmierung)" title="Reflexion (Programmierung)">Reflexion</a> zugegriffen werden. </p> <div class="mw-heading mw-heading3"><h3 id="Schnelle_Enumeration">Schnelle Enumeration</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Objective-C&veaction=edit&section=28" title="Abschnitt bearbeiten: Schnelle Enumeration" class="mw-editsection-visualeditor"><span>Bearbeiten</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Objective-C&action=edit&section=28" title="Quellcode des Abschnitts bearbeiten: Schnelle Enumeration"><span>Quelltext bearbeiten</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Ab 2.0 stellt Objective-C die „<i>for-in</i>“-Syntax zur Verfügung, um durch eine Kollektion zu iterieren (sie zu durchlaufen). </p> <div class="mw-highlight mw-highlight-lang-objc mw-content-ltr" dir="ltr"><pre><span></span><span class="c1">// alt iterieren</span> <span class="bp">NSEnumerator</span><span class="w"> </span><span class="o">*</span><span class="n">enumerator</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="n">thePeople</span><span class="w"> </span><span class="n">objectEnumerator</span><span class="p">];</span> <span class="n">Person</span><span class="w"> </span><span class="o">*</span><span class="n">p</span><span class="p">;</span> <span class="k">while</span><span class="w"> </span><span class="p">((</span><span class="n">p</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="n">enumerator</span><span class="w"> </span><span class="n">nextObject</span><span class="p">])</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">nil</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="n">NSLog</span><span class="p">(</span><span class="s">@"%@ is %i years old."</span><span class="p">,</span><span class="w"> </span><span class="p">[</span><span class="n">p</span><span class="w"> </span><span class="n">name</span><span class="p">],</span><span class="w"> </span><span class="p">[</span><span class="n">p</span><span class="w"> </span><span class="n">age</span><span class="p">]);</span> <span class="p">}</span> </pre></div> <div class="mw-highlight mw-highlight-lang-objc mw-content-ltr" dir="ltr"><pre><span></span><span class="c1">// alternativ iterieren</span> <span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="p">[</span><span class="n">thePeople</span><span class="w"> </span><span class="n">count</span><span class="p">];</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="n">Person</span><span class="w"> </span><span class="o">*</span><span class="n">p</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="n">thePeople</span><span class="w"> </span><span class="n">objectAtIndex</span><span class="o">:</span><span class="n">i</span><span class="p">];</span> <span class="w"> </span><span class="n">NSLog</span><span class="p">(</span><span class="s">@"%@ is %i years old."</span><span class="p">,</span><span class="w"> </span><span class="p">[</span><span class="n">p</span><span class="w"> </span><span class="n">name</span><span class="p">],</span><span class="w"> </span><span class="p">[</span><span class="n">p</span><span class="w"> </span><span class="n">age</span><span class="p">]);</span> <span class="p">}</span> </pre></div> <div class="mw-highlight mw-highlight-lang-objc mw-content-ltr" dir="ltr"><pre><span></span><span class="c1">// neu iterieren</span> <span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">Person</span><span class="w"> </span><span class="o">*</span><span class="n">p</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="n">thePeople</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="n">NSLog</span><span class="p">(</span><span class="s">@"%@ is %i years old."</span><span class="p">,</span><span class="w"> </span><span class="p">[</span><span class="n">p</span><span class="w"> </span><span class="n">name</span><span class="p">],</span><span class="w"> </span><span class="p">[</span><span class="n">p</span><span class="w"> </span><span class="n">age</span><span class="p">]);</span> <span class="p">}</span> </pre></div> <div class="mw-heading mw-heading2"><h2 id="Vergleich_zu_anderen_Programmiersprachen">Vergleich zu anderen Programmiersprachen</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Objective-C&veaction=edit&section=29" title="Abschnitt bearbeiten: Vergleich zu anderen Programmiersprachen" class="mw-editsection-visualeditor"><span>Bearbeiten</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Objective-C&action=edit&section=29" title="Quellcode des Abschnitts bearbeiten: Vergleich zu anderen Programmiersprachen"><span>Quelltext bearbeiten</span></a><span class="mw-editsection-bracket">]</span></span></div> <div class="mw-heading mw-heading3"><h3 id="C++"><span id="C.2B.2B"></span>C++</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Objective-C&veaction=edit&section=30" title="Abschnitt bearbeiten: C++" class="mw-editsection-visualeditor"><span>Bearbeiten</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Objective-C&action=edit&section=30" title="Quellcode des Abschnitts bearbeiten: C++"><span>Quelltext bearbeiten</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Obwohl beide Sprachen in C einen gemeinsamen Vorfahren haben, ergeben sich insbesondere aus dem späten Binden und der Möglichkeit, Klassen und Nachrichten zur Laufzeit zu erstellen, erhebliche Konzeptunterschiede. </p> <div class="mw-heading mw-heading4"><h4 id="Funktionalitätserweiterung"><span id="Funktionalit.C3.A4tserweiterung"></span>Funktionalitätserweiterung</h4><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Objective-C&veaction=edit&section=31" title="Abschnitt bearbeiten: Funktionalitätserweiterung" class="mw-editsection-visualeditor"><span>Bearbeiten</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Objective-C&action=edit&section=31" title="Quellcode des Abschnitts bearbeiten: Funktionalitätserweiterung"><span>Quelltext bearbeiten</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Objective-C bietet Kategorien als Lösungsmöglichkeit an. Hierbei wird nachträglich der Methodensatz einer Klasse erweitert. </p> <div class="mw-heading mw-heading2"><h2 id="Siehe_auch">Siehe auch</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Objective-C&veaction=edit&section=32" title="Abschnitt bearbeiten: Siehe auch" class="mw-editsection-visualeditor"><span>Bearbeiten</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Objective-C&action=edit&section=32" title="Quellcode des Abschnitts bearbeiten: Siehe auch"><span>Quelltext bearbeiten</span></a><span class="mw-editsection-bracket">]</span></span></div> <ul><li><a href="/wiki/Xcode" title="Xcode">Xcode</a></li></ul> <div class="mw-heading mw-heading2"><h2 id="Literatur">Literatur</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Objective-C&veaction=edit&section=33" title="Abschnitt bearbeiten: Literatur" class="mw-editsection-visualeditor"><span>Bearbeiten</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Objective-C&action=edit&section=33" title="Quellcode des Abschnitts bearbeiten: Literatur"><span>Quelltext bearbeiten</span></a><span class="mw-editsection-bracket">]</span></span></div> <ul><li>NeXT Computer, Inc. (Hrsg.): <i>Object-Oriented Programming and the Objective C Language, NeXTSTEP Developers Library Release 3.</i> Addison-Wesley, Reading, Mass. 1993, <a href="/wiki/Spezial:ISBN-Suche/0201632519" class="internal mw-magiclink-isbn">ISBN 0-201-63251-9</a>.</li> <li>Brad J. Cox, Andrew J. Novobilski: <i>Object-Oriented Programming: an evolutionary approach.</i> 2. Auflage. Addison-Wesley, Reading, Mass. 1991, <a href="/wiki/Spezial:ISBN-Suche/0201548348" class="internal mw-magiclink-isbn">ISBN 0-201-54834-8</a>. (Einführung vom Autor dieser Sprache).</li> <li>Stephen Kochan: <i>Programming in Objective-C.</i> Sams, 2003, <a href="/wiki/Spezial:ISBN-Suche/0672325861" class="internal mw-magiclink-isbn">ISBN 0-672-32586-1</a> (englisch).</li> <li>Aaron Hillegass: <i>Cocoa: Programmierung für Mac OS X.</i> 3. Ausgabe. Mitp-Verlag, Heidelberg 2008, <a href="/wiki/Spezial:ISBN-Suche/9783826659607" class="internal mw-magiclink-isbn">ISBN 978-3-8266-5960-7</a>.</li> <li>Stephen G. Kochan: <cite style="font-style:italic">Objective-C 2.0: Anwendungen entwickeln für Mac und iPhone</cite>. Pearson Deutschland, 2009, <a href="/wiki/Spezial:ISBN-Suche/9783827327468" class="internal mw-magiclink-isbn">ISBN 978-3-8273-2746-8</a> (<a rel="nofollow" class="external text" href="https://books.google.com/books?id=mqTxjduQzq0C#v=onepage&q=objective%20c%202.0%20garbage%20collection&f=false">books.google.com</a>).<span class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rfr_id=info:sid/de.wikipedia.org:Objective-C&rft.au=Stephen+G.+Kochan&rft.btitle=Objective-C+2.0%3A+Anwendungen+entwickeln+f%C3%BCr+Mac+und+iPhone&rft.date=2009&rft.genre=book&rft.isbn=9783827327468&rft.pub=Pearson+Deutschland" style="display:none"> </span></li> <li>Sebastian Meyer, Torben Wichers: <cite style="font-style:italic">Objective-C 2.0: [Programmierung für Mac OS X und iPhone; Objekte, Klassen, Nachrichten, Kategorien, Properties, Protokolle, Ausnahmebehandlung; foundation framework, Memory-Management, threading, bundles; design patterns für Objective-C]</cite>. 1. Auflage. mitp, Heidelberg/ München/ Landsberg/ Frechen/ Hamburg 2009, <a href="/wiki/Spezial:ISBN-Suche/9783826659669" class="internal mw-magiclink-isbn">ISBN 978-3-8266-5966-9</a>.<span class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rfr_id=info:sid/de.wikipedia.org:Objective-C&rft.au=Sebastian+Meyer%2C+Torben+Wichers&rft.btitle=Objective-C+2.0%3A+%5BProgrammierung+f%C3%BCr+Mac+OS+X+und+iPhone%3B+Objekte%2C+Klassen%2C+Nachrichten%2C+Kategorien%2C+Properties%2C+Protokolle%2C+Ausnahmebehandlung%3B+foundation+framework%2C+Memory-Management%2C+threading%2C+bundles%3B+design+patterns+f%C3%BCr+Objective-C%5D&rft.date=2009&rft.edition=1.&rft.genre=book&rft.isbn=9783826659669&rft.place=Heidelberg%2F+M%C3%BCnchen%2F+Landsberg%2F+Frechen%2F+Hamburg&rft.pub=mitp" style="display:none"> </span></li> <li>Amin Negm-Awad, Christian Kienle: <cite style="font-style:italic">Xcode, Objective-C und Cocoa</cite>. In: Horst-Dieter Radke (Hrsg.): <cite style="font-style:italic">Automatisierung und Anwendungsentwicklung auf dem Mac – Einführungen</cite>. 1. Auflage. SmartBooks Publishing AG, 2009, <a href="/wiki/Spezial:ISBN-Suche/9783908497981" class="internal mw-magiclink-isbn">ISBN 978-3-908497-98-1</a>.<span class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rfr_id=info:sid/de.wikipedia.org:Objective-C&rft.atitle=Xcode%2C+Objective-C+und+Cocoa&rft.au=Amin+Negm-Awad%2C+Christian+Kienle&rft.btitle=Automatisierung+und+Anwendungsentwicklung+auf+dem+Mac+-+Einf%C3%BChrungen&rft.date=2009&rft.edition=1.&rft.genre=book&rft.isbn=9783908497981&rft.pub=SmartBooks+Publishing+AG" style="display:none"> </span></li> <li>Amin Negm-Awad, Christian Kienle: <cite style="font-style:italic">Objective-C und Cocoa</cite>. 1. Auflage. <span style="white-space:nowrap">Band<span style="display:inline-block;width:.2em"> </span>2</span>: <i>Fortgeschrittene</i>. SmartBooks Verlag, 2010, <a href="/wiki/Spezial:ISBN-Suche/9783908497844" class="internal mw-magiclink-isbn">ISBN 978-3-908497-84-4</a>.<span class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rfr_id=info:sid/de.wikipedia.org:Objective-C&rft.au=Amin+Negm-Awad%2C+Christian+Kienle&rft.btitle=Objective-C+und+Cocoa&rft.date=2010&rft.edition=1.&rft.genre=book&rft.isbn=9783908497844&rft.pub=SmartBooks+Verlag&rft.volume=Band+2%3A+Fortgeschrittene" style="display:none"> </span></li> <li>Holger Hinzberg: <cite style="font-style:italic">Mac-Programmierung für Kids</cite>. 2. Auflage. mitp-Verlag, Frechen 2011, <a href="/wiki/Spezial:ISBN-Suche/9783826686849" class="internal mw-magiclink-isbn">ISBN 978-3-8266-8684-9</a>.<span class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rfr_id=info:sid/de.wikipedia.org:Objective-C&rft.au=Holger+Hinzberg&rft.btitle=Mac-Programmierung+f%C3%BCr+Kids&rft.date=2011&rft.edition=2.&rft.genre=book&rft.isbn=9783826686849&rft.place=Frechen&rft.pub=mitp-Verlag" style="display:none"> </span></li> <li>Amin Negm-Awad: <cite style="font-style:italic">Objective-C und Cocoa</cite>. 3./5. Auflage. <span style="white-space:nowrap">Band<span style="display:inline-block;width:.2em"> </span>1</span>: <i>Grundlagen</i>. SmartBooks Verlag, 2012, <a href="/wiki/Spezial:ISBN-Suche/9783908498087" class="internal mw-magiclink-isbn">ISBN 978-3-908498-08-7</a>.<span class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rfr_id=info:sid/de.wikipedia.org:Objective-C&rft.au=Amin+Negm-Awad&rft.btitle=Objective-C+und+Cocoa&rft.date=2012&rft.edition=3.%2F5.&rft.genre=book&rft.isbn=9783908498087&rft.pub=SmartBooks+Verlag&rft.volume=Band+1%3A+Grundlagen" style="display:none"> </span></li> <li>Holger Hinzberg: <cite style="font-style:italic">Modern Objective-C und Cocoa Praxiseinstieg: Programmierung für Mac OS X und iPhone</cite>. 3. Auflage. mitp-Verlag, Frechen 2014, <a href="/wiki/Spezial:ISBN-Suche/9783826697012" class="internal mw-magiclink-isbn">ISBN 978-3-8266-9701-2</a>.<span class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rfr_id=info:sid/de.wikipedia.org:Objective-C&rft.au=Holger+Hinzberg&rft.btitle=Modern+Objective-C+und+Cocoa+Praxiseinstieg%3A+Programmierung+f%C3%BCr+Mac+OS+X+und+iPhone&rft.date=2014&rft.edition=3.&rft.genre=book&rft.isbn=9783826697012&rft.place=Frechen&rft.pub=mitp-Verlag" style="display:none"> </span></li> <li>Matt Galloway: <cite style="font-style:italic">Effektiv Objective-C 2.0 programmieren 52 Profi-Lösungen für bessere iOS- und OS-X-Programmierung.</cite> Dpunkt.verlag, Heidelberg 2014, <a href="/wiki/Spezial:ISBN-Suche/9783944165714" class="internal mw-magiclink-isbn">ISBN 978-3-944165-71-4</a>.<span class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rfr_id=info:sid/de.wikipedia.org:Objective-C&rft.au=Matt+Galloway&rft.btitle=Effektiv+Objective-C+2.0+programmieren+52+Profi-L%C3%B6sungen+f%C3%BCr+bessere+iOS-+und+OS-X-Programmierung.&rft.date=2014&rft.genre=book&rft.isbn=9783944165714&rft.place=Heidelberg&rft.pub=Dpunkt.verlag" style="display:none"> </span></li></ul> <div class="mw-heading mw-heading2"><h2 id="Weblinks">Weblinks</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Objective-C&veaction=edit&section=34" title="Abschnitt bearbeiten: Weblinks" class="mw-editsection-visualeditor"><span>Bearbeiten</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Objective-C&action=edit&section=34" title="Quellcode des Abschnitts bearbeiten: Weblinks"><span>Quelltext bearbeiten</span></a><span class="mw-editsection-bracket">]</span></span></div> <ul><li><a rel="nofollow" class="external text" href="https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/Introduction/Introduction.html#//apple_ref/doc/uid/TP40011210-CH1-SW1"><i>About Objective-C</i></a> auf developer.apple.com (Stand: 17. September 2014)</li> <li><a rel="nofollow" class="external text" href="http://www.hameister.org/objc.html">Objective-C Beispiele und Tutorials zu verschiedenen Themen</a></li> <li><a rel="nofollow" class="external text" href="http://www.toodarkpark.org/computers/objc/">Object-Oriented Programming and The Objective-C Language</a></li> <li><a rel="nofollow" class="external text" href="http://www.faqs.org/faqs/computer-lang/Objective-C/faq/">Objective-C FAQ</a></li></ul> <div class="mw-heading mw-heading2"><h2 id="Einzelnachweise">Einzelnachweise</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Objective-C&veaction=edit&section=35" title="Abschnitt bearbeiten: Einzelnachweise" class="mw-editsection-visualeditor"><span>Bearbeiten</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Objective-C&action=edit&section=35" title="Quellcode des Abschnitts bearbeiten: Einzelnachweise"><span>Quelltext bearbeiten</span></a><span class="mw-editsection-bracket">]</span></span></div> <ol class="references"> <li id="cite_note-_7b266ba9308ca468-1"><span class="mw-cite-backlink"><a href="#cite_ref-_7b266ba9308ca468_1-0">↑</a></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtVersionsPlatforms.html"><cite style="font-style:italic">developer.apple.com</cite>.</a> (abgerufen am 2. September 2019).</span> </li> <li id="cite_note-2"><span class="mw-cite-backlink"><a href="#cite_ref-2">↑</a></span> <span class="reference-text"><span class="cite">Alexander Neumann: <a rel="nofollow" class="external text" href="https://www.heise.de/developer/meldung/Objective-C-zur-Sprache-des-Jahres-gekuert-1405610.html"><i>Objective-C zur Sprache des Jahres gekürt.</i></a> <a href="/wiki/Heise_online" title="Heise online">heise online</a>, 9. Januar 2012,<span class="Abrufdatum"> abgerufen am 21. Januar 2012</span>.</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&rfr_id=info%3Asid%2Fde.wikipedia.org%3AObjective-C&rft.title=Objective-C+zur+Sprache+des+Jahres+gek%C3%BCrt&rft.description=Objective-C+zur+Sprache+des+Jahres+gek%C3%BCrt&rft.identifier=https%3A%2F%2Fwww.heise.de%2Fdeveloper%2Fmeldung%2FObjective-C-zur-Sprache-des-Jahres-gekuert-1405610.html&rft.creator=Alexander+Neumann&rft.publisher=%5B%5Bheise+online%5D%5D&rft.date=2012-01-09"> </span></span> </li> <li id="cite_note-3"><span class="mw-cite-backlink"><a href="#cite_ref-3">↑</a></span> <span class="reference-text">Heise Zeitschriften Verlag: <a rel="nofollow" class="external text" href="https://www.heise.de/developer/meldung/Objective-C-ist-TIOBEs-Programmiersprache-des-Jahres-2012-1778460.html">Objective-C ist TIOBEs Programmiersprache des Jahres 2012</a>. 7. Jan. 2013 (abgerufen am 12. Feb. 2013)</span> </li> <li id="cite_note-4"><span class="mw-cite-backlink"><a href="#cite_ref-4">↑</a></span> <span class="reference-text"><span class="cite"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20090618184513/http://lists.apple.com/archives/Objc-language/2006/Aug/msg00039.html"><i>Objective-C 2.0: more clues.</i></a> Lists.apple.com, 10. August 2006, archiviert vom <style data-mw-deduplicate="TemplateStyles:r235239667">.mw-parser-output .dewiki-iconexternal>a{background-position:center right;background-repeat:no-repeat}body.skin-minerva .mw-parser-output .dewiki-iconexternal>a{background-image:url("https://upload.wikimedia.org/wikipedia/commons/a/a4/OOjs_UI_icon_external-link-ltr-progressive.svg")!important;background-size:10px;padding-right:13px!important}body.skin-timeless .mw-parser-output .dewiki-iconexternal>a,body.skin-monobook .mw-parser-output .dewiki-iconexternal>a{background-image:url("https://upload.wikimedia.org/wikipedia/commons/3/30/MediaWiki_external_link_icon.svg")!important;padding-right:13px!important}body.skin-vector .mw-parser-output .dewiki-iconexternal>a{background-image:url("https://upload.wikimedia.org/wikipedia/commons/9/96/Link-external-small-ltr-progressive.svg")!important;background-size:0.857em;padding-right:1em!important}</style><span class="dewiki-iconexternal"><a class="external text" href="https://redirecter.toolforge.org/?url=http%3A%2F%2Flists.apple.com%2Farchives%2FObjc-language%2F2006%2FAug%2Fmsg00039.html">Original</a></span> (nicht mehr online verfügbar) am <span style="white-space:nowrap;">18. Juni 2009</span><span>;</span><span class="Abrufdatum"> abgerufen am 30. Mai 2010</span>.</span> <small class="archiv-bot"><span class="wp_boppel noviewer" aria-hidden="true" role="presentation"><span typeof="mw:File"><span title="i"><img alt="" src="//upload.wikimedia.org/wikipedia/commons/thumb/4/4a/Pictogram_voting_info.svg/15px-Pictogram_voting_info.svg.png" decoding="async" width="15" height="15" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/4/4a/Pictogram_voting_info.svg/23px-Pictogram_voting_info.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/4/4a/Pictogram_voting_info.svg/30px-Pictogram_voting_info.svg.png 2x" data-file-width="250" data-file-height="250" /></span></span></span> <b>Info:</b> Der Archivlink wurde automatisch eingesetzt und noch nicht geprüft. Bitte prüfe Original- und Archivlink gemäß <a href="/wiki/Benutzer:InternetArchiveBot/Anleitung/Archivlink" title="Benutzer:InternetArchiveBot/Anleitung/Archivlink">Anleitung</a> und entferne dann diesen Hinweis.</small><span style="display:none"><a rel="nofollow" class="external text" href="http://IABotmemento.invalid/http://lists.apple.com/archives/Objc-language/2006/Aug/msg00039.html">@1</a></span><span style="display:none"><a rel="nofollow" class="external text" href="http://lists.apple.com/archives/Objc-language/2006/Aug/msg00039.html">@2</a></span><span style="display:none"><a href="/w/index.php?title=Vorlage:Webachiv/IABot/lists.apple.com&action=edit&redlink=1" class="new" title="Vorlage:Webachiv/IABot/lists.apple.com (Seite nicht vorhanden)">Vorlage:Webachiv/IABot/lists.apple.com</a></span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&rfr_id=info%3Asid%2Fde.wikipedia.org%3AObjective-C&rft.title=Objective-C+2.0%3A+more+clues&rft.description=Objective-C+2.0%3A+more+clues&rft.identifier=https%3A%2F%2Fweb.archive.org%2Fweb%2F20090618184513%2Fhttp%3A%2F%2Flists.apple.com%2Farchives%2FObjc-language%2F2006%2FAug%2Fmsg00039.html&rft.publisher=Lists.apple.com&rft.date=2006-08-10&rft.source=http://lists.apple.com/archives/Objc-language/2006/Aug/msg00039.html"> </span></span> </li> <li id="cite_note-5"><span class="mw-cite-backlink"><a href="#cite_ref-5">↑</a></span> <span class="reference-text"><span class="cite"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20101124014332/http://lists.apple.com/archives/Objc-language/2006/Aug/msg00018.html"><i>Re: Objective-C 2.0.</i></a> Lists.apple.com, archiviert vom <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r235239667"><span class="dewiki-iconexternal"><a class="external text" href="https://redirecter.toolforge.org/?url=http%3A%2F%2Flists.apple.com%2Farchives%2FObjc-language%2F2006%2FAug%2Fmsg00018.html">Original</a></span> (nicht mehr online verfügbar) am <span style="white-space:nowrap;">24. November 2010</span><span>;</span><span class="Abrufdatum"> abgerufen am 30. Mai 2010</span>.</span> <small class="archiv-bot"><span class="wp_boppel noviewer" aria-hidden="true" role="presentation"><span typeof="mw:File"><span title="i"><img alt="" src="//upload.wikimedia.org/wikipedia/commons/thumb/4/4a/Pictogram_voting_info.svg/15px-Pictogram_voting_info.svg.png" decoding="async" width="15" height="15" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/4/4a/Pictogram_voting_info.svg/23px-Pictogram_voting_info.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/4/4a/Pictogram_voting_info.svg/30px-Pictogram_voting_info.svg.png 2x" data-file-width="250" data-file-height="250" /></span></span></span> <b>Info:</b> Der Archivlink wurde automatisch eingesetzt und noch nicht geprüft. Bitte prüfe Original- und Archivlink gemäß <a href="/wiki/Benutzer:InternetArchiveBot/Anleitung/Archivlink" title="Benutzer:InternetArchiveBot/Anleitung/Archivlink">Anleitung</a> und entferne dann diesen Hinweis.</small><span style="display:none"><a rel="nofollow" class="external text" href="http://IABotmemento.invalid/http://lists.apple.com/archives/Objc-language/2006/Aug/msg00018.html">@1</a></span><span style="display:none"><a rel="nofollow" class="external text" href="http://lists.apple.com/archives/Objc-language/2006/Aug/msg00018.html">@2</a></span><span style="display:none"><a href="/w/index.php?title=Vorlage:Webachiv/IABot/lists.apple.com&action=edit&redlink=1" class="new" title="Vorlage:Webachiv/IABot/lists.apple.com (Seite nicht vorhanden)">Vorlage:Webachiv/IABot/lists.apple.com</a></span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&rfr_id=info%3Asid%2Fde.wikipedia.org%3AObjective-C&rft.title=Re%3A+Objective-C+2.0&rft.description=Re%3A+Objective-C+2.0&rft.identifier=https%3A%2F%2Fweb.archive.org%2Fweb%2F20101124014332%2Fhttp%3A%2F%2Flists.apple.com%2Farchives%2FObjc-language%2F2006%2FAug%2Fmsg00018.html&rft.publisher=Lists.apple.com&rft.date=&rft.source=http://lists.apple.com/archives/Objc-language/2006/Aug/msg00018.html"> </span></span> </li> <li id="cite_note-6"><span class="mw-cite-backlink"><a href="#cite_ref-6">↑</a></span> <span class="reference-text"><style data-mw-deduplicate="TemplateStyles:r246413598">.mw-parser-output .webarchiv-memento{color:var(--color-base,#202122)!important}</style><a rel="nofollow" class="external text" href="https://web.archive.org/web/20110607233026/http://developer.apple.com/cocoa/coredatatutorial/">Beispielvideo von Apple</a> (<a href="/wiki/Web-Archivierung#Begrifflichkeiten" title="Web-Archivierung"><span class="webarchiv-memento">Memento</span></a> vom 7. Juni 2011 im <i><a href="/wiki/Internet_Archive" title="Internet Archive">Internet Archive</a></i>)</span> </li> <li id="cite_note-7"><span class="mw-cite-backlink"><a href="#cite_ref-7">↑</a></span> <span class="reference-text"><span class="cite"><a rel="nofollow" class="external text" href="http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocProperties.html#//apple_ref/doc/uid/TP30001163-CH17-SW1"><i>Declared Properties.</i></a> In: <i>The Objective-C Programming Language.</i> <a href="/wiki/Apple" title="Apple">Apple</a>, 12. Oktober 2011,<span class="Abrufdatum"> abgerufen am 21. Januar 2012</span> (englisch).</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&rfr_id=info%3Asid%2Fde.wikipedia.org%3AObjective-C&rft.title=Declared+Properties&rft.description=Declared+Properties&rft.identifier=http%3A%2F%2Fdeveloper.apple.com%2Flibrary%2Fmac%2Fdocumentation%2FCocoa%2FConceptual%2FObjectiveC%2FChapters%2FocProperties.html%23%2F%2Fapple_ref%2Fdoc%2Fuid%2FTP30001163-CH17-SW1&rft.publisher=%5B%5BApple%5D%5D&rft.date=2011-10-12&rft.language=en"> </span></span> </li> <li id="cite_note-8"><span class="mw-cite-backlink"><a href="#cite_ref-8">↑</a></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r246413598"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20100724195423/http://developer.apple.com/leopard/overview/objectivec2.html">Apple – <i>Objective-C 2.0 Overview</i></a> (<a href="/wiki/Web-Archivierung#Begrifflichkeiten" title="Web-Archivierung"><span class="webarchiv-memento">Memento</span></a> vom 24. Juli 2010 im <i><a href="/wiki/Internet_Archive" title="Internet Archive">Internet Archive</a></i>)</span> </li> </ol> <div class="hintergrundfarbe1 rahmenfarbe1 navigation-not-searchable normdaten-typ-s" style="border-style: solid; border-width: 1px; clear: left; margin-bottom:1em; margin-top:1em; padding: 0.25em; overflow: hidden; word-break: break-word; word-wrap: break-word;" id="normdaten"> <div style="display: table-cell; vertical-align: middle; width: 100%;"> <div> Normdaten (Sachbegriff): <a href="/wiki/Gemeinsame_Normdatei" title="Gemeinsame Normdatei">GND</a>: <span class="plainlinks-print"><a rel="nofollow" class="external text" href="https://d-nb.info/gnd/4335874-3">4335874-3</a></span> <span class="noprint">(<a rel="nofollow" class="external text" href="https://lobid.org/gnd/4335874-3">lobid</a>, <a rel="nofollow" class="external text" href="https://swb.bsz-bw.de/DB=2.104/SET=1/TTL=1/CMD?retrace=0&trm_old=&ACT=SRCHA&IKT=2999&SRT=RLV&TRM=4335874-3">OGND</a><span class="metadata">, <a rel="nofollow" class="external text" href="https://prometheus.lmu.de/gnd/4335874-3">AKS</a></span>)</span> <span class="metadata"></span></div> </div></div></div><!--esi <esi:include src="/esitest-fa8a495983347898/content" /> --><noscript><img src="https://login.wikimedia.org/wiki/Special:CentralAutoLogin/start?type=1x1&useformat=desktop" alt="" width="1" height="1" style="border: none; position: absolute;"></noscript> <div class="printfooter" data-nosnippet="">Abgerufen von „<a dir="ltr" href="https://de.wikipedia.org/w/index.php?title=Objective-C&oldid=232689645">https://de.wikipedia.org/w/index.php?title=Objective-C&oldid=232689645</a>“</div></div> <div id="catlinks" class="catlinks" data-mw="interface"><div id="mw-normal-catlinks" class="mw-normal-catlinks"><a href="/wiki/Wikipedia:Kategorien" title="Wikipedia:Kategorien">Kategorien</a>: <ul><li><a href="/wiki/Kategorie:Objective-C" title="Kategorie:Objective-C">Objective-C</a></li><li><a href="/wiki/Kategorie:NeXT" title="Kategorie:NeXT">NeXT</a></li><li><a href="/wiki/Kategorie:MacOS-Software" title="Kategorie:MacOS-Software">MacOS-Software</a></li><li><a href="/wiki/Kategorie:GNUstep" title="Kategorie:GNUstep">GNUstep</a></li><li><a href="/wiki/Kategorie:Objektorientierte_Programmiersprache" title="Kategorie:Objektorientierte Programmiersprache">Objektorientierte Programmiersprache</a></li></ul></div><div id="mw-hidden-catlinks" class="mw-hidden-catlinks mw-hidden-cats-hidden">Versteckte Kategorie: <ul><li><a href="/wiki/Kategorie:Wikipedia:Defekte_Weblinks/Ungepr%C3%BCfte_Archivlinks_2019-05" title="Kategorie:Wikipedia:Defekte Weblinks/Ungeprüfte Archivlinks 2019-05">Wikipedia:Defekte Weblinks/Ungeprüfte Archivlinks 2019-05</a></li></ul></div></div> </div> </div> <div id="mw-navigation"> <h2>Navigationsmenü</h2> <div id="mw-head"> <nav id="p-personal" class="mw-portlet mw-portlet-personal vector-user-menu-legacy vector-menu" aria-labelledby="p-personal-label" > <h3 id="p-personal-label" class="vector-menu-heading " > <span class="vector-menu-heading-label">Meine Werkzeuge</span> </h3> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-anonuserpage" class="mw-list-item"><span title="Benutzerseite der IP-Adresse, von der aus du Änderungen durchführst">Nicht angemeldet</span></li><li id="pt-anontalk" class="mw-list-item"><a href="/wiki/Spezial:Meine_Diskussionsseite" title="Diskussion über Änderungen von dieser IP-Adresse [n]" accesskey="n"><span>Diskussionsseite</span></a></li><li id="pt-anoncontribs" class="mw-list-item"><a href="/wiki/Spezial:Meine_Beitr%C3%A4ge" title="Eine Liste der Bearbeitungen, die von dieser IP-Adresse gemacht wurden [y]" accesskey="y"><span>Beiträge</span></a></li><li id="pt-createaccount" class="mw-list-item"><a href="/w/index.php?title=Spezial:Benutzerkonto_anlegen&returnto=Objective-C" title="Wir ermutigen dich dazu, ein Benutzerkonto zu erstellen und dich anzumelden. Es ist jedoch nicht zwingend erforderlich."><span>Benutzerkonto erstellen</span></a></li><li id="pt-login" class="mw-list-item"><a href="/w/index.php?title=Spezial:Anmelden&returnto=Objective-C" title="Anmelden ist zwar keine Pflicht, wird aber gerne gesehen. [o]" accesskey="o"><span>Anmelden</span></a></li> </ul> </div> </nav> <div id="left-navigation"> <nav id="p-namespaces" class="mw-portlet mw-portlet-namespaces vector-menu-tabs vector-menu-tabs-legacy vector-menu" aria-labelledby="p-namespaces-label" > <h3 id="p-namespaces-label" class="vector-menu-heading " > <span class="vector-menu-heading-label">Namensräume</span> </h3> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-nstab-main" class="selected mw-list-item"><a href="/wiki/Objective-C" title="Seiteninhalt anzeigen [c]" accesskey="c"><span>Artikel</span></a></li><li id="ca-talk" class="mw-list-item"><a href="/wiki/Diskussion:Objective-C" rel="discussion" title="Diskussion zum Seiteninhalt [t]" accesskey="t"><span>Diskussion</span></a></li> </ul> </div> </nav> <nav id="p-variants" class="mw-portlet mw-portlet-variants emptyPortlet vector-menu-dropdown vector-menu" aria-labelledby="p-variants-label" > <input type="checkbox" id="p-variants-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-p-variants" class="vector-menu-checkbox" aria-labelledby="p-variants-label" > <label id="p-variants-label" class="vector-menu-heading " > <span class="vector-menu-heading-label">Deutsch</span> </label> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </nav> </div> <div id="right-navigation"> <nav id="p-views" class="mw-portlet mw-portlet-views vector-menu-tabs vector-menu-tabs-legacy vector-menu" aria-labelledby="p-views-label" > <h3 id="p-views-label" class="vector-menu-heading " > <span class="vector-menu-heading-label">Ansichten</span> </h3> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-view" class="selected mw-list-item"><a href="/wiki/Objective-C"><span>Lesen</span></a></li><li id="ca-ve-edit" class="mw-list-item"><a href="/w/index.php?title=Objective-C&veaction=edit" title="Diese Seite mit dem VisualEditor bearbeiten [v]" accesskey="v"><span>Bearbeiten</span></a></li><li id="ca-edit" class="collapsible mw-list-item"><a href="/w/index.php?title=Objective-C&action=edit" title="Den Quelltext dieser Seite bearbeiten [e]" accesskey="e"><span>Quelltext bearbeiten</span></a></li><li id="ca-history" class="mw-list-item"><a href="/w/index.php?title=Objective-C&action=history" title="Frühere Versionen dieser Seite [h]" accesskey="h"><span>Versionsgeschichte</span></a></li> </ul> </div> </nav> <nav id="p-cactions" class="mw-portlet mw-portlet-cactions emptyPortlet vector-menu-dropdown vector-menu" aria-labelledby="p-cactions-label" title="Weitere Optionen" > <input type="checkbox" id="p-cactions-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-p-cactions" class="vector-menu-checkbox" aria-labelledby="p-cactions-label" > <label id="p-cactions-label" class="vector-menu-heading " > <span class="vector-menu-heading-label">Weitere</span> </label> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </nav> <div id="p-search" role="search" class="vector-search-box-vue vector-search-box-show-thumbnail vector-search-box-auto-expand-width vector-search-box"> <h3 >Suche</h3> <form action="/w/index.php" id="searchform" class="vector-search-box-form"> <div id="simpleSearch" class="vector-search-box-inner" data-search-loc="header-navigation"> <input class="vector-search-box-input" type="search" name="search" placeholder="Wikipedia durchsuchen" aria-label="Wikipedia durchsuchen" autocapitalize="sentences" title="Durchsuche die Wikipedia [f]" accesskey="f" id="searchInput" > <input type="hidden" name="title" value="Spezial:Suche"> <input id="mw-searchButton" class="searchButton mw-fallbackSearchButton" type="submit" name="fulltext" title="Suche nach Seiten, die diesen Text enthalten" value="Suchen"> <input id="searchButton" class="searchButton" type="submit" name="go" title="Gehe direkt zu der Seite mit genau diesem Namen, falls sie vorhanden ist." value="Artikel"> </div> </form> </div> </div> </div> <div id="mw-panel" class="vector-legacy-sidebar"> <div id="p-logo" role="banner"> <a class="mw-wiki-logo" href="/wiki/Wikipedia:Hauptseite" title="Hauptseite"></a> </div> <nav id="p-navigation" class="mw-portlet mw-portlet-navigation vector-menu-portal portal vector-menu" aria-labelledby="p-navigation-label" > <h3 id="p-navigation-label" class="vector-menu-heading " > <span class="vector-menu-heading-label">Navigation</span> </h3> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-mainpage-description" class="mw-list-item"><a href="/wiki/Wikipedia:Hauptseite" title="Hauptseite besuchen [z]" accesskey="z"><span>Hauptseite</span></a></li><li id="n-topics" class="mw-list-item"><a href="/wiki/Portal:Wikipedia_nach_Themen"><span>Themenportale</span></a></li><li id="n-randompage" class="mw-list-item"><a href="/wiki/Spezial:Zuf%C3%A4llige_Seite" title="Zufällige Seite aufrufen [x]" accesskey="x"><span>Zufälliger Artikel</span></a></li> </ul> </div> </nav> <nav id="p-Mitmachen" class="mw-portlet mw-portlet-Mitmachen vector-menu-portal portal vector-menu" aria-labelledby="p-Mitmachen-label" > <h3 id="p-Mitmachen-label" class="vector-menu-heading " > <span class="vector-menu-heading-label">Mitmachen</span> </h3> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-Artikel-verbessern" class="mw-list-item"><a href="/wiki/Wikipedia:Beteiligen"><span>Artikel verbessern</span></a></li><li id="n-Neuerartikel" class="mw-list-item"><a href="/wiki/Hilfe:Neuen_Artikel_anlegen"><span>Neuen Artikel anlegen</span></a></li><li id="n-portal" class="mw-list-item"><a href="/wiki/Wikipedia:Autorenportal" title="Info-Zentrum über Beteiligungsmöglichkeiten"><span>Autorenportal</span></a></li><li id="n-help" class="mw-list-item"><a href="/wiki/Hilfe:%C3%9Cbersicht" title="Übersicht über Hilfeseiten"><span>Hilfe</span></a></li><li id="n-recentchanges" class="mw-list-item"><a href="/wiki/Spezial:Letzte_%C3%84nderungen" title="Liste der letzten Änderungen in Wikipedia [r]" accesskey="r"><span>Letzte Änderungen</span></a></li><li id="n-contact" class="mw-list-item"><a href="/wiki/Wikipedia:Kontakt" title="Kontaktmöglichkeiten"><span>Kontakt</span></a></li><li id="n-sitesupport" class="mw-list-item"><a href="//donate.wikimedia.org/wiki/Special:FundraiserRedirector?utm_source=donate&utm_medium=sidebar&utm_campaign=C13_de.wikipedia.org&uselang=de" title="Unterstütze uns"><span>Spenden</span></a></li> </ul> </div> </nav> <nav id="p-tb" class="mw-portlet mw-portlet-tb vector-menu-portal portal vector-menu" aria-labelledby="p-tb-label" > <h3 id="p-tb-label" class="vector-menu-heading " > <span class="vector-menu-heading-label">Werkzeuge</span> </h3> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="t-whatlinkshere" class="mw-list-item"><a href="/wiki/Spezial:Linkliste/Objective-C" title="Liste aller Seiten, die hierher verlinken [j]" accesskey="j"><span>Links auf diese Seite</span></a></li><li id="t-recentchangeslinked" class="mw-list-item"><a href="/wiki/Spezial:%C3%84nderungen_an_verlinkten_Seiten/Objective-C" rel="nofollow" title="Letzte Änderungen an Seiten, die von hier verlinkt sind [k]" accesskey="k"><span>Änderungen an verlinkten Seiten</span></a></li><li id="t-specialpages" class="mw-list-item"><a href="/wiki/Spezial:Spezialseiten" title="Liste aller Spezialseiten [q]" accesskey="q"><span>Spezialseiten</span></a></li><li id="t-permalink" class="mw-list-item"><a href="/w/index.php?title=Objective-C&oldid=232689645" title="Dauerhafter Link zu dieser Seitenversion"><span>Permanenter Link</span></a></li><li id="t-info" class="mw-list-item"><a href="/w/index.php?title=Objective-C&action=info" title="Weitere Informationen über diese Seite"><span>Seiteninformationen</span></a></li><li id="t-cite" class="mw-list-item"><a href="/w/index.php?title=Spezial:Zitierhilfe&page=Objective-C&id=232689645&wpFormIdentifier=titleform" title="Hinweise, wie diese Seite zitiert werden kann"><span>Artikel zitieren</span></a></li><li id="t-urlshortener" class="mw-list-item"><a href="/w/index.php?title=Spezial:URL-K%C3%BCrzung&url=https%3A%2F%2Fde.wikipedia.org%2Fwiki%2FObjective-C"><span>Kurzlink</span></a></li><li id="t-urlshortener-qrcode" class="mw-list-item"><a href="/w/index.php?title=Spezial:QrCode&url=https%3A%2F%2Fde.wikipedia.org%2Fwiki%2FObjective-C"><span>QR-Code herunterladen</span></a></li> </ul> </div> </nav> <nav id="p-coll-print_export" class="mw-portlet mw-portlet-coll-print_export vector-menu-portal portal vector-menu" aria-labelledby="p-coll-print_export-label" > <h3 id="p-coll-print_export-label" class="vector-menu-heading " > <span class="vector-menu-heading-label">Drucken/exportieren</span> </h3> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="coll-download-as-rl" class="mw-list-item"><a href="/w/index.php?title=Spezial:DownloadAsPdf&page=Objective-C&action=show-download-screen"><span>Als PDF herunterladen</span></a></li><li id="t-print" class="mw-list-item"><a href="/w/index.php?title=Objective-C&printable=yes" title="Druckansicht dieser Seite [p]" accesskey="p"><span>Druckversion</span></a></li> </ul> </div> </nav> <nav id="p-wikibase-otherprojects" class="mw-portlet mw-portlet-wikibase-otherprojects vector-menu-portal portal vector-menu" aria-labelledby="p-wikibase-otherprojects-label" > <h3 id="p-wikibase-otherprojects-label" class="vector-menu-heading " > <span class="vector-menu-heading-label">In anderen Projekten</span> </h3> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li class="wb-otherproject-link wb-otherproject-commons mw-list-item"><a href="https://commons.wikimedia.org/wiki/Category:Objective-C" hreflang="en"><span>Commons</span></a></li><li id="t-wikibase" class="wb-otherproject-link wb-otherproject-wikibase-dataitem mw-list-item"><a href="https://www.wikidata.org/wiki/Special:EntityPage/Q188531" title="Link zum verbundenen Objekt im Datenrepositorium [g]" accesskey="g"><span>Wikidata-Datenobjekt</span></a></li> </ul> </div> </nav> <nav id="p-lang" class="mw-portlet mw-portlet-lang vector-menu-portal portal vector-menu" aria-labelledby="p-lang-label" > <h3 id="p-lang-label" class="vector-menu-heading " > <span class="vector-menu-heading-label">In anderen Sprachen</span> </h3> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li class="interlanguage-link interwiki-ar mw-list-item"><a href="https://ar.wikipedia.org/wiki/%D8%B3%D9%8A-%D8%A7%D9%84%D9%83%D8%A7%D8%A6%D9%86%D9%8A%D8%A9" title="سي-الكائنية – Arabisch" lang="ar" hreflang="ar" data-title="سي-الكائنية" data-language-autonym="العربية" data-language-local-name="Arabisch" class="interlanguage-link-target"><span>العربية</span></a></li><li class="interlanguage-link interwiki-az mw-list-item"><a href="https://az.wikipedia.org/wiki/Objective-C" title="Objective-C – Aserbaidschanisch" lang="az" hreflang="az" data-title="Objective-C" data-language-autonym="Azərbaycanca" data-language-local-name="Aserbaidschanisch" class="interlanguage-link-target"><span>Azərbaycanca</span></a></li><li class="interlanguage-link interwiki-be mw-list-item"><a href="https://be.wikipedia.org/wiki/Objective-C" title="Objective-C – Belarussisch" lang="be" hreflang="be" data-title="Objective-C" data-language-autonym="Беларуская" data-language-local-name="Belarussisch" class="interlanguage-link-target"><span>Беларуская</span></a></li><li class="interlanguage-link interwiki-bg mw-list-item"><a href="https://bg.wikipedia.org/wiki/Objective-C" title="Objective-C – Bulgarisch" lang="bg" hreflang="bg" data-title="Objective-C" data-language-autonym="Български" data-language-local-name="Bulgarisch" class="interlanguage-link-target"><span>Български</span></a></li><li class="interlanguage-link interwiki-bn mw-list-item"><a href="https://bn.wikipedia.org/wiki/%E0%A6%85%E0%A6%AC%E0%A6%9C%E0%A7%87%E0%A6%95%E0%A7%8D%E0%A6%9F%E0%A6%BF%E0%A6%AD_%E0%A6%B8%E0%A6%BF" title="অবজেক্টিভ সি – Bengalisch" lang="bn" hreflang="bn" data-title="অবজেক্টিভ সি" data-language-autonym="বাংলা" data-language-local-name="Bengalisch" class="interlanguage-link-target"><span>বাংলা</span></a></li><li class="interlanguage-link interwiki-ca mw-list-item"><a href="https://ca.wikipedia.org/wiki/Objective-C" title="Objective-C – Katalanisch" lang="ca" hreflang="ca" data-title="Objective-C" data-language-autonym="Català" data-language-local-name="Katalanisch" class="interlanguage-link-target"><span>Català</span></a></li><li class="interlanguage-link interwiki-cs mw-list-item"><a href="https://cs.wikipedia.org/wiki/Objective-C" title="Objective-C – Tschechisch" lang="cs" hreflang="cs" data-title="Objective-C" data-language-autonym="Čeština" data-language-local-name="Tschechisch" class="interlanguage-link-target"><span>Čeština</span></a></li><li class="interlanguage-link interwiki-da mw-list-item"><a href="https://da.wikipedia.org/wiki/Objective-C" title="Objective-C – Dänisch" lang="da" hreflang="da" data-title="Objective-C" data-language-autonym="Dansk" data-language-local-name="Dänisch" class="interlanguage-link-target"><span>Dansk</span></a></li><li class="interlanguage-link interwiki-el mw-list-item"><a href="https://el.wikipedia.org/wiki/Objective-C" title="Objective-C – Griechisch" lang="el" hreflang="el" data-title="Objective-C" data-language-autonym="Ελληνικά" data-language-local-name="Griechisch" class="interlanguage-link-target"><span>Ελληνικά</span></a></li><li class="interlanguage-link interwiki-en mw-list-item"><a href="https://en.wikipedia.org/wiki/Objective-C" title="Objective-C – Englisch" lang="en" hreflang="en" data-title="Objective-C" data-language-autonym="English" data-language-local-name="Englisch" class="interlanguage-link-target"><span>English</span></a></li><li class="interlanguage-link interwiki-eo mw-list-item"><a href="https://eo.wikipedia.org/wiki/Objective-C" title="Objective-C – Esperanto" lang="eo" hreflang="eo" data-title="Objective-C" data-language-autonym="Esperanto" data-language-local-name="Esperanto" class="interlanguage-link-target"><span>Esperanto</span></a></li><li class="interlanguage-link interwiki-es mw-list-item"><a href="https://es.wikipedia.org/wiki/Objective-C" title="Objective-C – Spanisch" lang="es" hreflang="es" data-title="Objective-C" data-language-autonym="Español" data-language-local-name="Spanisch" class="interlanguage-link-target"><span>Español</span></a></li><li class="interlanguage-link interwiki-fa mw-list-item"><a href="https://fa.wikipedia.org/wiki/%D8%A2%D8%A8%D8%AC%DA%A9%D8%AA%DB%8C%D9%88-%D8%B3%DB%8C" title="آبجکتیو-سی – Persisch" lang="fa" hreflang="fa" data-title="آبجکتیو-سی" data-language-autonym="فارسی" data-language-local-name="Persisch" class="interlanguage-link-target"><span>فارسی</span></a></li><li class="interlanguage-link interwiki-fi mw-list-item"><a href="https://fi.wikipedia.org/wiki/Objective-C" title="Objective-C – Finnisch" lang="fi" hreflang="fi" data-title="Objective-C" data-language-autonym="Suomi" data-language-local-name="Finnisch" class="interlanguage-link-target"><span>Suomi</span></a></li><li class="interlanguage-link interwiki-fr mw-list-item"><a href="https://fr.wikipedia.org/wiki/Objective-C" title="Objective-C – Französisch" lang="fr" hreflang="fr" data-title="Objective-C" data-language-autonym="Français" data-language-local-name="Französisch" class="interlanguage-link-target"><span>Français</span></a></li><li class="interlanguage-link interwiki-gl mw-list-item"><a href="https://gl.wikipedia.org/wiki/Objective-C" title="Objective-C – Galicisch" lang="gl" hreflang="gl" data-title="Objective-C" data-language-autonym="Galego" data-language-local-name="Galicisch" class="interlanguage-link-target"><span>Galego</span></a></li><li class="interlanguage-link interwiki-he mw-list-item"><a href="https://he.wikipedia.org/wiki/Objective-C" title="Objective-C – Hebräisch" lang="he" hreflang="he" data-title="Objective-C" data-language-autonym="עברית" data-language-local-name="Hebräisch" class="interlanguage-link-target"><span>עברית</span></a></li><li class="interlanguage-link interwiki-hu mw-list-item"><a href="https://hu.wikipedia.org/wiki/Objective-C" title="Objective-C – Ungarisch" lang="hu" hreflang="hu" data-title="Objective-C" data-language-autonym="Magyar" data-language-local-name="Ungarisch" class="interlanguage-link-target"><span>Magyar</span></a></li><li class="interlanguage-link interwiki-hy mw-list-item"><a href="https://hy.wikipedia.org/wiki/Objective-C" title="Objective-C – Armenisch" lang="hy" hreflang="hy" data-title="Objective-C" data-language-autonym="Հայերեն" data-language-local-name="Armenisch" class="interlanguage-link-target"><span>Հայերեն</span></a></li><li class="interlanguage-link interwiki-it mw-list-item"><a href="https://it.wikipedia.org/wiki/Objective-C" title="Objective-C – Italienisch" lang="it" hreflang="it" data-title="Objective-C" data-language-autonym="Italiano" data-language-local-name="Italienisch" class="interlanguage-link-target"><span>Italiano</span></a></li><li class="interlanguage-link interwiki-ja mw-list-item"><a href="https://ja.wikipedia.org/wiki/Objective-C" title="Objective-C – Japanisch" lang="ja" hreflang="ja" data-title="Objective-C" data-language-autonym="日本語" data-language-local-name="Japanisch" class="interlanguage-link-target"><span>日本語</span></a></li><li class="interlanguage-link interwiki-ka mw-list-item"><a href="https://ka.wikipedia.org/wiki/Objective-C" title="Objective-C – Georgisch" lang="ka" hreflang="ka" data-title="Objective-C" data-language-autonym="ქართული" data-language-local-name="Georgisch" class="interlanguage-link-target"><span>ქართული</span></a></li><li class="interlanguage-link interwiki-kk mw-list-item"><a href="https://kk.wikipedia.org/wiki/Objective-C" title="Objective-C – Kasachisch" lang="kk" hreflang="kk" data-title="Objective-C" data-language-autonym="Қазақша" data-language-local-name="Kasachisch" class="interlanguage-link-target"><span>Қазақша</span></a></li><li class="interlanguage-link interwiki-ko mw-list-item"><a href="https://ko.wikipedia.org/wiki/%EC%98%A4%EB%B8%8C%EC%A0%9D%ED%8B%B0%EB%B8%8C-C" title="오브젝티브-C – Koreanisch" lang="ko" hreflang="ko" data-title="오브젝티브-C" data-language-autonym="한국어" data-language-local-name="Koreanisch" class="interlanguage-link-target"><span>한국어</span></a></li><li class="interlanguage-link interwiki-ky mw-list-item"><a href="https://ky.wikipedia.org/wiki/Objective-C" title="Objective-C – Kirgisisch" lang="ky" hreflang="ky" data-title="Objective-C" data-language-autonym="Кыргызча" data-language-local-name="Kirgisisch" class="interlanguage-link-target"><span>Кыргызча</span></a></li><li class="interlanguage-link interwiki-ml mw-list-item"><a href="https://ml.wikipedia.org/wiki/%E0%B4%92%E0%B4%AC%E0%B5%8D%E0%B4%9C%E0%B4%95%E0%B5%8D%E0%B4%9F%E0%B5%80%E0%B4%B5%E0%B5%8D-%E0%B4%B8%E0%B4%BF" title="ഒബ്ജക്ടീവ്-സി – Malayalam" lang="ml" hreflang="ml" data-title="ഒബ്ജക്ടീവ്-സി" data-language-autonym="മലയാളം" data-language-local-name="Malayalam" class="interlanguage-link-target"><span>മലയാളം</span></a></li><li class="interlanguage-link interwiki-nl mw-list-item"><a href="https://nl.wikipedia.org/wiki/Objective-C" title="Objective-C – Niederländisch" lang="nl" hreflang="nl" data-title="Objective-C" data-language-autonym="Nederlands" data-language-local-name="Niederländisch" class="interlanguage-link-target"><span>Nederlands</span></a></li><li class="interlanguage-link interwiki-no mw-list-item"><a href="https://no.wikipedia.org/wiki/Objective-C" title="Objective-C – Norwegisch (Bokmål)" lang="nb" hreflang="nb" data-title="Objective-C" data-language-autonym="Norsk bokmål" data-language-local-name="Norwegisch (Bokmål)" class="interlanguage-link-target"><span>Norsk bokmål</span></a></li><li class="interlanguage-link interwiki-pl mw-list-item"><a href="https://pl.wikipedia.org/wiki/Objective-C" title="Objective-C – Polnisch" lang="pl" hreflang="pl" data-title="Objective-C" data-language-autonym="Polski" data-language-local-name="Polnisch" class="interlanguage-link-target"><span>Polski</span></a></li><li class="interlanguage-link interwiki-pt mw-list-item"><a href="https://pt.wikipedia.org/wiki/Objective-C" title="Objective-C – Portugiesisch" lang="pt" hreflang="pt" data-title="Objective-C" data-language-autonym="Português" data-language-local-name="Portugiesisch" class="interlanguage-link-target"><span>Português</span></a></li><li class="interlanguage-link interwiki-ru mw-list-item"><a href="https://ru.wikipedia.org/wiki/Objective-C" title="Objective-C – Russisch" lang="ru" hreflang="ru" data-title="Objective-C" data-language-autonym="Русский" data-language-local-name="Russisch" class="interlanguage-link-target"><span>Русский</span></a></li><li class="interlanguage-link interwiki-simple mw-list-item"><a href="https://simple.wikipedia.org/wiki/Objective-C" title="Objective-C – einfaches Englisch" lang="en-simple" hreflang="en-simple" data-title="Objective-C" data-language-autonym="Simple English" data-language-local-name="einfaches Englisch" class="interlanguage-link-target"><span>Simple English</span></a></li><li class="interlanguage-link interwiki-sk mw-list-item"><a href="https://sk.wikipedia.org/wiki/Objective-C" title="Objective-C – Slowakisch" lang="sk" hreflang="sk" data-title="Objective-C" data-language-autonym="Slovenčina" data-language-local-name="Slowakisch" class="interlanguage-link-target"><span>Slovenčina</span></a></li><li class="interlanguage-link interwiki-sl mw-list-item"><a href="https://sl.wikipedia.org/wiki/Objective-C" title="Objective-C – Slowenisch" lang="sl" hreflang="sl" data-title="Objective-C" data-language-autonym="Slovenščina" data-language-local-name="Slowenisch" class="interlanguage-link-target"><span>Slovenščina</span></a></li><li class="interlanguage-link interwiki-sr mw-list-item"><a href="https://sr.wikipedia.org/wiki/Objective-C" title="Objective-C – Serbisch" lang="sr" hreflang="sr" data-title="Objective-C" data-language-autonym="Српски / srpski" data-language-local-name="Serbisch" class="interlanguage-link-target"><span>Српски / srpski</span></a></li><li class="interlanguage-link interwiki-sv mw-list-item"><a href="https://sv.wikipedia.org/wiki/Objective-C" title="Objective-C – Schwedisch" lang="sv" hreflang="sv" data-title="Objective-C" data-language-autonym="Svenska" data-language-local-name="Schwedisch" class="interlanguage-link-target"><span>Svenska</span></a></li><li class="interlanguage-link interwiki-ta mw-list-item"><a href="https://ta.wikipedia.org/wiki/%E0%AE%92%E0%AE%AA%E0%AF%8D%E0%AE%9A%E0%AF%86%E0%AE%95%E0%AF%8D%E0%AE%9F%E0%AE%BF%E0%AE%B5%E0%AF%8D_%E0%AE%9A%E0%AE%BF" title="ஒப்செக்டிவ் சி – Tamil" lang="ta" hreflang="ta" data-title="ஒப்செக்டிவ் சி" data-language-autonym="தமிழ்" data-language-local-name="Tamil" class="interlanguage-link-target"><span>தமிழ்</span></a></li><li class="interlanguage-link interwiki-tg mw-list-item"><a href="https://tg.wikipedia.org/wiki/Objective-C" title="Objective-C – Tadschikisch" lang="tg" hreflang="tg" data-title="Objective-C" data-language-autonym="Тоҷикӣ" data-language-local-name="Tadschikisch" class="interlanguage-link-target"><span>Тоҷикӣ</span></a></li><li class="interlanguage-link interwiki-th mw-list-item"><a href="https://th.wikipedia.org/wiki/%E0%B8%A0%E0%B8%B2%E0%B8%A9%E0%B8%B2%E0%B8%AD%E0%B9%87%E0%B8%AD%E0%B8%9A%E0%B9%80%E0%B8%88%E0%B8%81%E0%B8%97%E0%B8%B5%E0%B8%9F-%E0%B8%8B%E0%B8%B5" title="ภาษาอ็อบเจกทีฟ-ซี – Thailändisch" lang="th" hreflang="th" data-title="ภาษาอ็อบเจกทีฟ-ซี" data-language-autonym="ไทย" data-language-local-name="Thailändisch" class="interlanguage-link-target"><span>ไทย</span></a></li><li class="interlanguage-link interwiki-tr mw-list-item"><a href="https://tr.wikipedia.org/wiki/Objective-C" title="Objective-C – Türkisch" lang="tr" hreflang="tr" data-title="Objective-C" data-language-autonym="Türkçe" data-language-local-name="Türkisch" class="interlanguage-link-target"><span>Türkçe</span></a></li><li class="interlanguage-link interwiki-uk mw-list-item"><a href="https://uk.wikipedia.org/wiki/Objective-C" title="Objective-C – Ukrainisch" lang="uk" hreflang="uk" data-title="Objective-C" data-language-autonym="Українська" data-language-local-name="Ukrainisch" class="interlanguage-link-target"><span>Українська</span></a></li><li class="interlanguage-link interwiki-vi mw-list-item"><a href="https://vi.wikipedia.org/wiki/Objective-C" title="Objective-C – Vietnamesisch" lang="vi" hreflang="vi" data-title="Objective-C" data-language-autonym="Tiếng Việt" data-language-local-name="Vietnamesisch" class="interlanguage-link-target"><span>Tiếng Việt</span></a></li><li class="interlanguage-link interwiki-zh mw-list-item"><a href="https://zh.wikipedia.org/wiki/Objective-C" title="Objective-C – Chinesisch" lang="zh" hreflang="zh" data-title="Objective-C" data-language-autonym="中文" data-language-local-name="Chinesisch" class="interlanguage-link-target"><span>中文</span></a></li><li class="interlanguage-link interwiki-zh-min-nan mw-list-item"><a href="https://zh-min-nan.wikipedia.org/wiki/Objective-C" title="Objective-C – Min Nan" lang="nan" hreflang="nan" data-title="Objective-C" data-language-autonym="閩南語 / Bân-lâm-gú" data-language-local-name="Min Nan" class="interlanguage-link-target"><span>閩南語 / Bân-lâm-gú</span></a></li><li class="interlanguage-link interwiki-zh-yue mw-list-item"><a href="https://zh-yue.wikipedia.org/wiki/Objective-C" title="Objective-C – Kantonesisch" lang="yue" hreflang="yue" data-title="Objective-C" data-language-autonym="粵語" data-language-local-name="Kantonesisch" class="interlanguage-link-target"><span>粵語</span></a></li> </ul> <div class="after-portlet after-portlet-lang"><span class="wb-langlinks-edit wb-langlinks-link"><a href="https://www.wikidata.org/wiki/Special:EntityPage/Q188531#sitelinks-wikipedia" title="Links auf Artikel in anderen Sprachen bearbeiten" class="wbc-editpage">Links bearbeiten</a></span></div> </div> </nav> </div> </div> <footer id="footer" class="mw-footer" > <ul id="footer-info"> <li id="footer-info-lastmod"> Diese Seite wurde zuletzt am 11. April 2023 um 14:14 Uhr bearbeitet.</li> <li id="footer-info-copyright"><div id="footer-info-copyright-stats" class="noprint"><a rel="nofollow" class="external text" href="https://pageviews.wmcloud.org/?pages=Objective-C&project=de.wikipedia.org">Abrufstatistik</a> · <a rel="nofollow" class="external text" href="https://xtools.wmcloud.org/authorship/de.wikipedia.org/Objective-C?uselang=de">Autoren</a> </div><div id="footer-info-copyright-separator"><br /></div><div id="footer-info-copyright-info"> <p>Der Text ist unter der Lizenz <a rel="nofollow" class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.de">„Creative-Commons Namensnennung – Weitergabe unter gleichen Bedingungen“</a> verfügbar; Informationen zu den Urhebern und zum Lizenzstatus eingebundener Mediendateien (etwa Bilder oder Videos) können im Regelfall durch Anklicken dieser abgerufen werden. Möglicherweise unterliegen die Inhalte jeweils zusätzlichen Bedingungen. Durch die Nutzung dieser Website erklären Sie sich mit den <span class="plainlinks"><a class="external text" href="https://foundation.wikimedia.org/wiki/Policy:Terms_of_Use/de">Nutzungsbedingungen</a> und der <a class="external text" href="https://foundation.wikimedia.org/wiki/Policy:Privacy_policy/de">Datenschutzrichtlinie</a></span> einverstanden.<br /> </p> Wikipedia® ist eine eingetragene Marke der Wikimedia Foundation Inc.</div></li> </ul> <ul id="footer-places"> <li id="footer-places-privacy"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Privacy_policy/de">Datenschutz</a></li> <li id="footer-places-about"><a href="/wiki/Wikipedia:%C3%9Cber_Wikipedia">Über Wikipedia</a></li> <li id="footer-places-disclaimers"><a href="/wiki/Wikipedia:Impressum">Impressum</a></li> <li id="footer-places-wm-codeofconduct"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Universal_Code_of_Conduct">Verhaltenskodex</a></li> <li id="footer-places-developers"><a href="https://developer.wikimedia.org">Entwickler</a></li> <li id="footer-places-statslink"><a href="https://stats.wikimedia.org/#/de.wikipedia.org">Statistiken</a></li> <li id="footer-places-cookiestatement"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Cookie_statement">Stellungnahme zu Cookies</a></li> <li id="footer-places-mobileview"><a href="//de.m.wikipedia.org/w/index.php?title=Objective-C&mobileaction=toggle_view_mobile" class="noprint stopMobileRedirectToggle">Mobile Ansicht</a></li> </ul> <ul id="footer-icons" class="noprint"> <li id="footer-copyrightico"><a href="https://wikimediafoundation.org/" class="cdx-button cdx-button--fake-button cdx-button--size-large cdx-button--fake-button--enabled"><img src="/static/images/footer/wikimedia-button.svg" width="84" height="29" alt="Wikimedia Foundation" loading="lazy"></a></li> <li id="footer-poweredbyico"><a href="https://www.mediawiki.org/" class="cdx-button cdx-button--fake-button cdx-button--size-large cdx-button--fake-button--enabled"><img src="/w/resources/assets/poweredby_mediawiki.svg" alt="Powered by MediaWiki" width="88" height="31" loading="lazy"></a></li> </ul> </footer> <script>(RLQ=window.RLQ||[]).push(function(){mw.log.warn("This page is using the deprecated ResourceLoader module \"codex-search-styles\".\n[1.43] Use a CodexModule with codexComponents to set your specific components used: https://www.mediawiki.org/wiki/Codex#Using_a_limited_subset_of_components");mw.config.set({"wgHostname":"mw-web.codfw.canary-6cb65f6cd-vkgc4","wgBackendResponseTime":160,"wgPageParseReport":{"limitreport":{"cputime":"0.321","walltime":"2.537","ppvisitednodes":{"value":2517,"limit":1000000},"postexpandincludesize":{"value":43187,"limit":2097152},"templateargumentsize":{"value":11002,"limit":2097152},"expansiondepth":{"value":13,"limit":100},"expensivefunctioncount":{"value":26,"limit":500},"unstrip-depth":{"value":1,"limit":20},"unstrip-size":{"value":30448,"limit":5000000},"entityaccesscount":{"value":1,"limit":400},"timingprofile":["100.00% 2479.562 1 -total"," 5.18% 128.558 1 Vorlage:Infobox_Programmiersprache"," 4.63% 114.744 4 Vorlage:Internetquelle"," 1.52% 37.601 8 Vorlage:Literatur"," 0.63% 15.681 2 Vorlage:Webarchiv"," 0.50% 12.403 2 Vorlage:Referrer"," 0.43% 10.659 2 Vorlage:IconExternal"," 0.39% 9.719 1 Vorlage:Normdaten"," 0.39% 9.674 4 Vorlage:Str_len"," 0.38% 9.351 2 Vorlage:Webarchiv/archiv-bot"]},"scribunto":{"limitreport-timeusage":{"value":"0.129","limit":"10.000"},"limitreport-memusage":{"value":4468960,"limit":52428800}},"cachereport":{"origin":"mw-web.eqiad.main-8cb5f4d85-pbtgp","timestamp":"20241126194737","ttl":2592000,"transientcontent":false}}});});</script> <script type="application/ld+json">{"@context":"https:\/\/schema.org","@type":"Article","name":"Objective-C","url":"https:\/\/de.wikipedia.org\/wiki\/Objective-C","sameAs":"http:\/\/www.wikidata.org\/entity\/Q188531","mainEntity":"http:\/\/www.wikidata.org\/entity\/Q188531","author":{"@type":"Organization","name":"Autoren der Wikimedia-Projekte"},"publisher":{"@type":"Organization","name":"Wikimedia Foundation, Inc.","logo":{"@type":"ImageObject","url":"https:\/\/www.wikimedia.org\/static\/images\/wmf-hor-googpub.png"}},"datePublished":"2003-05-20T22:20:49Z","headline":"Programmiersprache"}</script> </body> </html>