Objective-C
| {{#if: Objective-C | Objective-C | {{#invoke:WLink|getArticleBase}} }} | |||
|---|---|---|---|
colspan="2" class="notheme" style="text-align:center; background-color:#Vorlage:Standardfarbe;" | |
{{#if: {{#invoke:Wikidata|claim|P154}} |
|
[[Datei:{{#invoke:Wikidata|claim|P154}}|150px]]
}} }} | ||
| {{{Screenshot}}}{{#if: | }}| }} | |||
| Basisdaten | |||
| Paradigmen: |
}} | ||
| Erscheinungsjahr: |
{{#if: {{#invoke:Wikidata|claim|P571}} |
|
Erscheinungsjahr: | claim|P571|references=ja}}
}} }} |
| Designer: |
{{#if: {{#invoke:Wikidata|claim|P287}} |
|
Designer: | claim|P287|parameter=link|references=ja|list=, }}
}} }} |
| Entwickler: | Brad Cox, Tom Love |
{{#if: {{#invoke:Wikidata|claim|P178}} |
|
Entwickler: | claim|P178|parameter=link|references=ja|list=, }}
}} }} |
| Aktuelle Version: | () |
{{#if: {{#invoke:Wikidata|claim|P348}} | |
Aktuelle Version | {{#invoke:Wikidata|claim|P348|references=ja}}{{#if: {{#invoke:Wikidata|claim|Version|qualifier=P577}} | ({{#invoke:Wikidata|claim|Version|qualifier=P577}})}}}}
}} |
| Aktuelle Vorabversion: | ()
}} | ||
| Typisierung: | stark, statisch, explizit, dynamisch
}} | ||
| Wichtige Implementierungen: |
}} | ||
| Dialekte: |
}} | ||
| Standardisierungen: |
}} | ||
| Beeinflusst von: | Smalltalk, C |
{{#if: {{#invoke:Wikidata|claim|P737}} |
|
Beeinflusst von: | claim|P737|parameter=link|references=ja|list=, }}
}} }} |
| Beeinflusste: | Swift
}} | ||
| Betriebssystem: | NeXTSTEP/OPENSTEP; macOS/iOS; alle, die GNUstep verwenden |
{{#if: {{#invoke:Wikidata|claim|P306}} |
|
Betriebssystem: | claim|P306|parameter=link|references=ja|list=, }}
}} }} |
| Lizenz: |
{{#if: {{#invoke:Wikidata|claim|P275}} |
|
Lizenz: | claim|P275|parameter=link|references=ja|list=, }}
}} }} |
Developer documentation |
{{#if: {{#invoke:Wikidata|claim|P856}} |
| |||
{{#invoke: WLink | formatURL | {{#invoke:Wikidata|claim|P856|parameter=link}}}}
}} }} | |||
Objective-C, auch kurz ObjC genannt, erweitert die Programmiersprache C um Sprachmittel zur objektorientierten Programmierung. Objective-C ist eine echte Obermenge von C, das bedeutet, dass jedes C-Programm mit einem Objective-C-Compiler kompiliert werden kann. Objective-C ist die primäre Sprache von Cocoa (macOS) und GNUstep.
Die Syntax und Konzeption der objektorientierten Erweiterungen ist an Smalltalk angelehnt und von der gewöhnlichen prozeduralen C-Syntax strikt getrennt. Diese Trennung erlaubt es, dasselbe Erweiterungskonzept auf andere imperative Sprachen anzuwenden; so gibt es etwa Objective Pascal und Objective-J. Objective-C++ erlaubt teilweise die Mischung von Objective-C mit C++-Code mit dem Ziel, älteren Code verwenden zu können.
Unter den im TIOBE-Index erfassten Sprachen konnte Objective-C in den Jahren 2011 und 2012 den größten Zuwachs verzeichnen und erhielt deshalb zweimal in Folge den Titel Sprache des Jahres.<ref>{{#if:|{{#iferror: {{#iferror:{{#invoke:Vorlage:FormatDate|Execute}}|}}| |}}}}{{#if:Alexander Neumann|Alexander Neumann: }}{{#if:|{{#if:Objective-C zur Sprache des Jahres gekürt|[{{#invoke:Vorlage:Internetquelle|archivURL|1={{#invoke:URLutil|getNormalized|1={{{archiv-url}}}}}}} {{#invoke:Vorlage:Internetquelle|TitelFormat|titel=Objective-C zur Sprache des Jahres gekürt}}]{{#if:| ({{{format}}})}}{{#if:| {{{titelerg}}}{{#invoke:Vorlage:Internetquelle|Endpunkt|titel={{{titelerg}}}}}}}}}|{{#if:https://www.heise.de/developer/meldung/Objective-C-zur-Sprache-des-Jahres-gekuert-1405610.html%7C{{#if:{{#invoke:TemplUtl%7Cfaculty%7C}}%7C{{#invoke:Vorlage:Internetquelle%7CTitelFormat%7Ctitel={{#invoke:WLink%7CgetEscapedTitle%7C1=Objective-C zur Sprache des Jahres gekürt}}}}|[{{#invoke:URLutil|getNormalized|1=https://www.heise.de/developer/meldung/Objective-C-zur-Sprache-des-Jahres-gekuert-1405610.html}} {{#invoke:Vorlage:Internetquelle|TitelFormat|titel={{#invoke:WLink|getEscapedTitle|1=Objective-C zur Sprache des Jahres gekürt}}}}]}}{{#if:| ({{{format}}}{{#if:heise online2012-01-09{{#if: 2012-01-21 | {{#if:{{#invoke:TemplUtl|faculty|}}||1}}}}
| )
| {{#if:{{#ifeq:de|de||{{#if:|1}}}}| ;
| )}}}}}}{{#if:| {{{titelerg}}}{{#invoke:Vorlage:Internetquelle|Endpunkt|titel={{{titelerg}}}}}}}}}}}{{#if:https://www.heise.de/developer/meldung/Objective-C-zur-Sprache-des-Jahres-gekuert-1405610.html%7C{{#if:{{#invoke:URLutil%7CisResourceURL%7C1=https://www.heise.de/developer/meldung/Objective-C-zur-Sprache-des-Jahres-gekuert-1405610.html}}%7C%7C}}}}{{#if:Objective-C zur Sprache des Jahres gekürt|{{#if:{{#invoke:WLink|isValidLinktext|1=Objective-C zur Sprache des Jahres gekürt|lines=0}}||}}}}{{#if: | In: {{#invoke:Vorlage:Internetquelle|TitelFormat|titel={{{werk}}}}}}}{{#if: heise online| heise online{{#if: 2012-01-09|,|{{#if: 2012-01-21 | {{#if:{{#invoke:TemplUtl|faculty|}}||,}}}}}}}}{{#if: 2012-01-09| {{#if:{{#invoke:DateTime|format|2012-01-09|noerror=1}}
|{{#invoke:DateTime|format|2012-01-09|T._Monat JJJJ}}
|{{#invoke:TemplUtl|failure|1=Fehler bei Vorlage:Internetquelle, datum=2012-01-09|class=Zitationswartung}} }}{{#if: |,|{{#if: 2012-01-21 | {{#if:{{#invoke:TemplUtl|faculty|}}||,}}}}}}}}{{#if: | S. {{{seiten}}}{{#if: |,|{{#if: 2012-01-21 | {{#if:{{#invoke:TemplUtl|faculty|}}||,}}}}}}}}{{#if: {{#invoke:TemplUtl|faculty|}}| {{#if:2012-01-09heise online|{{#if:|archiviert|ehemals}}|{{#if:|Archiviert|Ehemals}}}} {{#if:|vom|im}} Vorlage:Referrer{{#if:{{#invoke:TemplUtl|faculty|}}| (nicht mehr online verfügbar)}}{{#if: | am {{#iferror: {{#iferror:{{#invoke:Vorlage:FormatDate|Execute}}|}}|{{{archiv-datum}}}{{#if:19997||(?)}}}}}}{{#if: 2012-01-21|;}}}}{{#if: 2012-01-21| {{#if:2012-01-09heise online{{#invoke:TemplUtl|faculty|}}|abgerufen|Abgerufen}} {{#switch: {{#invoke:Str|len| {{#invoke:DateTime|format| 2012-01-21 |ISO|noerror=1}} }}
|4=im Jahr
|7=im
|10=am
|#default={{#invoke:TemplUtl|failure|1=Fehler bei Vorlage:Internetquelle, abruf=2012-01-21|class=Zitationswartung}} }} {{#invoke:DateTime|format|2012-01-21|T._Monat JJJJ}}
| {{#invoke:TemplUtl|failure|1=Vorlage:Internetquelle | abruf=2026-MM-TT ist Pflichtparameter}} }}{{#if:{{#ifeq:de|de||{{#if:|1}}}}|{{#if:heise online2012-01-09{{#if: 2012-01-21 | {{#if:{{#invoke:TemplUtl|faculty|}}||1}}}}
| (
| {{#if: | | (}}
}}{{#ifeq:{{#if:de|de|de}}|de||
{{#invoke:Multilingual|format|{{{sprache}}}|slang=!|split=[%s,]+|shift=m|separator=, }}}}{{#if: |{{#ifeq:{{#if:de|de|de}}|de||, }}{{{kommentar}}}}})}}{{#if: 2012-01-09{{#if: 2012-01-21 | {{#if:{{#invoke:TemplUtl|faculty|}}||1}} }}|{{#if: |: {{
#if:
| „{{
#ifeq: {{#if:{{#if: {{#invoke:templutl|faculty|}}|de-ch|de}}|{{#if: {{#invoke:templutl|faculty|}}|de-ch|de}}|de}} | de
| Vorlage:Str trim
| {{#invoke:Vorlage:lang|flat}}
}}“
| {{#ifeq: {{#if:{{#if: {{#invoke:templutl|faculty|}}|de-ch|de}}|{{#if: {{#invoke:templutl|faculty|}}|de-ch|de}}|de}} | de
| „Vorlage:Str trim“
| {{#invoke:Text|quote
|1={{#if:
| {{#invoke:Vorlage:lang|flat}}
| {{#invoke:Vorlage:lang|flat}} }}
|2={{#if: {{#invoke:TemplUtl|faculty|}}|de-CH|de}}
|3=1}} }}
}}{{#if:
| (<templatestyles src="Person/styles.css" />{{#if: | : }}{{#if: | , deutsch: „“ }})
| {{#if:
| ({{#if: | , deutsch: „“ }})
| {{#if: | (deutsch: „“) }}
}}
}}{{#if: {{{zitat}}}
| {{#if:
| {{#if: {{{zitat}}}
| Vorlage:": Text= und 1= gleichzeitig, bzw. Pipe zu viel }} }}
| Vorlage:": Text= fehlt }}{{#if: | {{#if: {{#invoke:Text|unstrip|{{{ref}}}}}
| Vorlage:": Ungültiger Wert: ref=
| {{{ref}}} }}
}}|.{{#if:{{#invoke:TemplUtl|faculty|}}|{{#if:||{{#ifeq: | JaKeinHinweis |{{#switch:
|0|=Vorlage:Toter Link/Core{{#if: https://www.heise.de/developer/meldung/Objective-C-zur-Sprache-des-Jahres-gekuert-1405610.html | {{#if: | [1] }} (Seite {{#switch:|no|0|=|dauerhaft }}nicht mehr abrufbar{{#if: | , festgestellt im {{#invoke:DateTime|format||F Y}} }}. Suche im Internet Archive ){{#if: | {{#if: deadurlausgeblendet | | Vorlage:Toter Link/archivebot }} }} | (Seite {{#switch:|no|0|=|#default=dauerhaft }}nicht mehr abrufbar{{#if: | , festgestellt im {{#invoke:DateTime|format||F Y}} }}.) }}{{#switch: |no|0|= |#default={{#if: || }} }}{{#invoke:TemplatePar|check |opt = inline= url= text= datum= date= archivebot= bot= botlauf= fix-attempted= checked= |cat = Wikipedia:Vorlagenfehler/Vorlage:Toter Link |errNS = 0 |template = Vorlage:Toter Link |format = |preview = 1 }}{{#if: https://www.heise.de/developer/meldung/Objective-C-zur-Sprache-des-Jahres-gekuert-1405610.html | {{#if:{{#invoke:URLutil|isWebURL|https://www.heise.de/developer/meldung/Objective-C-zur-Sprache-des-Jahres-gekuert-1405610.html}} || {{#if: || }} }} | {{#if: | {{#if: || }} | {{#if: || }} }} }}{{#if: | {{#if:{{#invoke:DateTime|format||F Y|noerror=1}} || {{#if: || }} }} }}{{#switch: deadurl |checked|deadurl|= |#default= {{#if: || }} }}|#default= https://wiki-de.moshellshocker.dns64.de/index.php?title=Wikipedia:Defekte_Weblinks&dwl=https://www.heise.de/developer/meldung/Objective-C-zur-Sprache-des-Jahres-gekuert-1405610.html Die nachstehende Seite ist {{#switch:|no|0|=|dauerhaft }}nicht mehr abrufbar]{{#if: | , festgestellt im {{#invoke:DateTime|format||F Y}} }}. (Suche im Internet Archive. ) {{#if: | {{#if: deadurlausgeblendet | | Vorlage:Toter Link/archivebot }} }}Vorlage:Toter Link/Core{{#switch: |no|0|= |#default= {{#if: || }} }}{{#invoke:TemplatePar|check |all = inline= url= |opt = datum= date= archivebot= bot= botlauf= fix-attempted= checked= |cat = Wikipedia:Vorlagenfehler/Vorlage:Toter Link |errNS = 0 |template = Vorlage:Toter Link |format = |preview = 1 }}{{#if: https://www.heise.de/developer/meldung/Objective-C-zur-Sprache-des-Jahres-gekuert-1405610.html | {{#if:{{#invoke:URLutil|isWebURL|https://www.heise.de/developer/meldung/Objective-C-zur-Sprache-des-Jahres-gekuert-1405610.html}} || {{#if: || }} }} }}{{#if: | {{#if:{{#invoke:DateTime|format||F Y|noerror=1}} || {{#if: || }} }} }}{{#switch: deadurl |checked|deadurl|= |#default= {{#if: || }} }}[https://www.heise.de/developer/meldung/Objective-C-zur-Sprache-des-Jahres-gekuert-1405610.html }}|{{#switch: |0|=Vorlage:Toter Link/Core{{#if: https://www.heise.de/developer/meldung/Objective-C-zur-Sprache-des-Jahres-gekuert-1405610.html | {{#if: | [2] }} (Seite {{#switch:|no|0|=|dauerhaft }}nicht mehr abrufbar{{#if: | , festgestellt im {{#invoke:DateTime|format||F Y}} }}. Suche im Internet Archive ){{#if: | {{#if: | | Vorlage:Toter Link/archivebot }} }} | (Seite {{#switch:|no|0|=|#default=dauerhaft }}nicht mehr abrufbar{{#if: | , festgestellt im {{#invoke:DateTime|format||F Y}} }}.) }}{{#switch: |no|0|= |#default={{#if: || }} }}{{#invoke:TemplatePar|check |opt = inline= url= text= datum= date= archivebot= bot= botlauf= fix-attempted= checked= |cat = Wikipedia:Vorlagenfehler/Vorlage:Toter Link |errNS = 0 |template = Vorlage:Toter Link |format = |preview = 1 }}{{#if: https://www.heise.de/developer/meldung/Objective-C-zur-Sprache-des-Jahres-gekuert-1405610.html | {{#if:{{#invoke:URLutil|isWebURL|https://www.heise.de/developer/meldung/Objective-C-zur-Sprache-des-Jahres-gekuert-1405610.html}} || {{#if: || }} }} | {{#if: | {{#if: || }} | {{#if: || }} }} }}{{#if: | {{#if:{{#invoke:DateTime|format||F Y|noerror=1}} || {{#if: || }} }} }}{{#switch: |checked|deadurl|= |#default= {{#if: || }} }}|#default= https://wiki-de.moshellshocker.dns64.de/index.php?title=Wikipedia:Defekte_Weblinks&dwl=https://www.heise.de/developer/meldung/Objective-C-zur-Sprache-des-Jahres-gekuert-1405610.html Die nachstehende Seite ist {{#switch:|no|0|=|dauerhaft }}nicht mehr abrufbar]{{#if: | , festgestellt im {{#invoke:DateTime|format||F Y}} }}. (Suche im Internet Archive. ) {{#if: | {{#if: | | Vorlage:Toter Link/archivebot }} }}Vorlage:Toter Link/Core{{#switch: |no|0|= |#default= {{#if: || }} }}{{#invoke:TemplatePar|check |all = inline= url= |opt = datum= date= archivebot= bot= botlauf= fix-attempted= checked= |cat = Wikipedia:Vorlagenfehler/Vorlage:Toter Link |errNS = 0 |template = Vorlage:Toter Link |format = |preview = 1 }}{{#if: https://www.heise.de/developer/meldung/Objective-C-zur-Sprache-des-Jahres-gekuert-1405610.html | {{#if:{{#invoke:URLutil|isWebURL|https://www.heise.de/developer/meldung/Objective-C-zur-Sprache-des-Jahres-gekuert-1405610.html}} || {{#if: || }} }} }}{{#if: | {{#if:{{#invoke:DateTime|format||F Y|noerror=1}} || {{#if: || }} }} }}{{#switch: |checked|deadurl|= |#default= {{#if: || }} }}[https://www.heise.de/developer/meldung/Objective-C-zur-Sprache-des-Jahres-gekuert-1405610.html }} }}}}}}}}}}{{#if:| {{#invoke:Vorlage:Internetquelle|archivBot|stamp={{{archiv-bot}}}|text={{#if:|Vorlage:Webarchiv/archiv-bot}}
}}}}{{#invoke:TemplatePar|check |all= url= titel= |opt= autor= hrsg= format= sprache= titelerg= werk= seiten= datum= abruf= zugriff= abruf-verborgen= archiv-url= archiv-datum= archiv-bot= kommentar= zitat= AT= CH= offline= |cat= {{#ifeq: 0 | 0 | Wikipedia:Vorlagenfehler/Vorlage:Internetquelle}} |template= Vorlage:Internetquelle |format=0 |preview=1 }}</ref><ref>Heise Zeitschriften Verlag: Objective-C ist TIOBEs Programmiersprache des Jahres 2012. 7. Jan. 2013 (abgerufen am 12. Feb. 2013)</ref>
Geschichte
Objective-C wurde hauptsächlich von Brad Cox und Tom Love in den 1980er Jahren bei PPI, später Stepstone, entwickelt, später dann von NeXT in die GNU Compiler Collection integriert, um als Basis für NeXTSTEP zu dienen.
Auf der Worldwide Developers Conference 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,<ref>{{#if:2009-06-18|{{#iferror: {{#iferror:{{#invoke:Vorlage:FormatDate|Execute}}|}}| |}}}}{{#if:|{{{autor}}}: }}{{#if:https://web.archive.org/web/20090618184513/http://lists.apple.com/archives/Objc-language/2006/Aug/msg00039.html%7C{{#if:Objective-C 2.0: more clues|[{{#invoke:Vorlage:Internetquelle|archivURL|1={{#invoke:URLutil|getNormalized|1=https://web.archive.org/web/20090618184513/http://lists.apple.com/archives/Objc-language/2006/Aug/msg00039.html}}}} {{#invoke:Vorlage:Internetquelle|TitelFormat|titel=Objective-C 2.0: more clues}}]{{#if:| ({{{format}}})}}{{#if:| {{{titelerg}}}{{#invoke:Vorlage:Internetquelle|Endpunkt|titel={{{titelerg}}}}}}}}}|{{#if:http://lists.apple.com/archives/Objc-language/2006/Aug/msg00039.html%7C{{#if:{{#invoke:TemplUtl%7Cfaculty%7Cja}}%7C{{#invoke:Vorlage:Internetquelle%7CTitelFormat%7Ctitel={{#invoke:WLink%7CgetEscapedTitle%7C1=Objective-C 2.0: more clues}}}}|[{{#invoke:URLutil|getNormalized|1=http://lists.apple.com/archives/Objc-language/2006/Aug/msg00039.html}} {{#invoke:Vorlage:Internetquelle|TitelFormat|titel={{#invoke:WLink|getEscapedTitle|1=Objective-C 2.0: more clues}}}}]}}{{#if:| ({{{format}}}{{#if:jaLists.apple.com2006-08-10https://web.archive.org/web/20090618184513/http://lists.apple.com/archives/Objc-language/2006/Aug/msg00039.html{{#if: 2010-05-30 | {{#if:{{#invoke:TemplUtl|faculty|}}||1}}}}
| )
| {{#if:{{#ifeq:de|de||{{#if:|1}}}}| ;
| )}}}}}}{{#if:| {{{titelerg}}}{{#invoke:Vorlage:Internetquelle|Endpunkt|titel={{{titelerg}}}}}}}}}}}{{#if:http://lists.apple.com/archives/Objc-language/2006/Aug/msg00039.html%7C{{#if:{{#invoke:URLutil%7CisResourceURL%7C1=http://lists.apple.com/archives/Objc-language/2006/Aug/msg00039.html}}%7C%7C}}}}{{#if:Objective-C 2.0: more clues|{{#if:{{#invoke:WLink|isValidLinktext|1=Objective-C 2.0: more clues|lines=0}}||}}}}{{#if: | In: {{#invoke:Vorlage:Internetquelle|TitelFormat|titel={{{werk}}}}}}}{{#if: Lists.apple.com| Lists.apple.com{{#if: 2006-08-10https://web.archive.org/web/20090618184513/http://lists.apple.com/archives/Objc-language/2006/Aug/msg00039.html%7C,%7C{{#if: 2010-05-30 | {{#if:{{#invoke:TemplUtl|faculty|}}||,}}}}}}}}{{#if: 2006-08-10| {{#if:{{#invoke:DateTime|format|2006-08-10|noerror=1}}
|{{#invoke:DateTime|format|2006-08-10|T._Monat JJJJ}}
|{{#invoke:TemplUtl|failure|1=Fehler bei Vorlage:Internetquelle, datum=2006-08-10|class=Zitationswartung}} }}{{#if: https://web.archive.org/web/20090618184513/http://lists.apple.com/archives/Objc-language/2006/Aug/msg00039.html%7C,%7C{{#if: 2010-05-30 | {{#if:{{#invoke:TemplUtl|faculty|}}||,}}}}}}}}{{#if: | S. {{{seiten}}}{{#if: https://web.archive.org/web/20090618184513/http://lists.apple.com/archives/Objc-language/2006/Aug/msg00039.html%7C,%7C{{#if: 2010-05-30 | {{#if:{{#invoke:TemplUtl|faculty|}}||,}}}}}}}}{{#if: https://web.archive.org/web/20090618184513/http://lists.apple.com/archives/Objc-language/2006/Aug/msg00039.html{{#invoke:TemplUtl%7Cfaculty%7Cja}}%7C+{{#if:2006-08-10Lists.apple.com%7C{{#if:https://web.archive.org/web/20090618184513/http://lists.apple.com/archives/Objc-language/2006/Aug/msg00039.html%7Carchiviert%7Cehemals}}%7C{{#if:https://web.archive.org/web/20090618184513/http://lists.apple.com/archives/Objc-language/2006/Aug/msg00039.html%7CArchiviert%7CEhemals}}}}+{{#if:https://web.archive.org/web/20090618184513/http://lists.apple.com/archives/Objc-language/2006/Aug/msg00039.html%7Cvom%7Cim}}+Vorlage:Referrer{{#if:{{#invoke:TemplUtl|faculty|ja}}| (nicht mehr online verfügbar)}}{{#if: 2009-06-18| am {{#iferror: {{#iferror:{{#invoke:Vorlage:FormatDate|Execute}}|}}|2009-06-18{{#if:19997||(?)}}}}}}{{#if: 2010-05-30|;}}}}{{#if: 2010-05-30| {{#if:2006-08-10Lists.apple.comhttps://web.archive.org/web/20090618184513/http://lists.apple.com/archives/Objc-language/2006/Aug/msg00039.html{{#invoke:TemplUtl%7Cfaculty%7Cja}}%7Cabgerufen%7CAbgerufen}} {{#switch: {{#invoke:Str|len| {{#invoke:DateTime|format| 2010-05-30 |ISO|noerror=1}} }}
|4=im Jahr
|7=im
|10=am
|#default={{#invoke:TemplUtl|failure|1=Fehler bei Vorlage:Internetquelle, abruf=2010-05-30|class=Zitationswartung}} }} {{#invoke:DateTime|format|2010-05-30|T._Monat JJJJ}}
| {{#invoke:TemplUtl|failure|1=Vorlage:Internetquelle | abruf=2026-MM-TT ist Pflichtparameter}} }}{{#if:{{#ifeq:de|de||{{#if:|1}}}}|{{#if:jaLists.apple.com2006-08-10https://web.archive.org/web/20090618184513/http://lists.apple.com/archives/Objc-language/2006/Aug/msg00039.html{{#if: 2010-05-30 | {{#if:{{#invoke:TemplUtl|faculty|}}||1}}}}
| (
| {{#if: | | (}}
}}{{#ifeq:{{#if:de|de|de}}|de||
{{#invoke:Multilingual|format|{{{sprache}}}|slang=!|split=[%s,]+|shift=m|separator=, }}}}{{#if: |{{#ifeq:{{#if:de|de|de}}|de||, }}{{{kommentar}}}}})}}{{#if: 2006-08-10https://web.archive.org/web/20090618184513/http://lists.apple.com/archives/Objc-language/2006/Aug/msg00039.html{{#if: 2010-05-30 | {{#if:{{#invoke:TemplUtl|faculty|}}||1}} }}|{{#if: |: {{
#if:
| „{{
#ifeq: {{#if:{{#if: {{#invoke:templutl|faculty|}}|de-ch|de}}|{{#if: {{#invoke:templutl|faculty|}}|de-ch|de}}|de}} | de
| Vorlage:Str trim
| {{#invoke:Vorlage:lang|flat}}
}}“
| {{#ifeq: {{#if:{{#if: {{#invoke:templutl|faculty|}}|de-ch|de}}|{{#if: {{#invoke:templutl|faculty|}}|de-ch|de}}|de}} | de
| „Vorlage:Str trim“
| {{#invoke:Text|quote
|1={{#if:
| {{#invoke:Vorlage:lang|flat}}
| {{#invoke:Vorlage:lang|flat}} }}
|2={{#if: {{#invoke:TemplUtl|faculty|}}|de-CH|de}}
|3=1}} }}
}}{{#if:
| (<templatestyles src="Person/styles.css" />{{#if: | : }}{{#if: | , deutsch: „“ }})
| {{#if:
| ({{#if: | , deutsch: „“ }})
| {{#if: | (deutsch: „“) }}
}}
}}{{#if: {{{zitat}}}
| {{#if:
| {{#if: {{{zitat}}}
| Vorlage:": Text= und 1= gleichzeitig, bzw. Pipe zu viel }} }}
| Vorlage:": Text= fehlt }}{{#if: | {{#if: {{#invoke:Text|unstrip|{{{ref}}}}}
| Vorlage:": Ungültiger Wert: ref=
| {{{ref}}} }}
}}|.{{#if:{{#invoke:TemplUtl|faculty|ja}}|{{#if:https://web.archive.org/web/20090618184513/http://lists.apple.com/archives/Objc-language/2006/Aug/msg00039.html%7C%7C{{#ifeq: ja | JaKeinHinweis |{{#switch:
|0|=Vorlage:Toter Link/Core{{#if: http://lists.apple.com/archives/Objc-language/2006/Aug/msg00039.html | {{#if: | [3] }} (Seite {{#switch:|no|0|=|dauerhaft }}nicht mehr abrufbar{{#if: | , festgestellt im {{#invoke:DateTime|format||F Y}} }}. Suche im Internet Archive ){{#if: | {{#if: deadurlausgeblendet | | Vorlage:Toter Link/archivebot }} }} | (Seite {{#switch:|no|0|=|#default=dauerhaft }}nicht mehr abrufbar{{#if: | , festgestellt im {{#invoke:DateTime|format||F Y}} }}.) }}{{#switch: |no|0|= |#default={{#if: || }} }}{{#invoke:TemplatePar|check |opt = inline= url= text= datum= date= archivebot= bot= botlauf= fix-attempted= checked= |cat = Wikipedia:Vorlagenfehler/Vorlage:Toter Link |errNS = 0 |template = Vorlage:Toter Link |format = |preview = 1 }}{{#if: http://lists.apple.com/archives/Objc-language/2006/Aug/msg00039.html | {{#if:{{#invoke:URLutil|isWebURL|http://lists.apple.com/archives/Objc-language/2006/Aug/msg00039.html}} || {{#if: || }} }} | {{#if: | {{#if: || }} | {{#if: || }} }} }}{{#if: | {{#if:{{#invoke:DateTime|format||F Y|noerror=1}} || {{#if: || }} }} }}{{#switch: deadurl |checked|deadurl|= |#default= {{#if: || }} }}|#default= https://wiki-de.moshellshocker.dns64.de/index.php?title=Wikipedia:Defekte_Weblinks&dwl=http://lists.apple.com/archives/Objc-language/2006/Aug/msg00039.html Die nachstehende Seite ist {{#switch:|no|0|=|dauerhaft }}nicht mehr abrufbar]{{#if: | , festgestellt im {{#invoke:DateTime|format||F Y}} }}. (Suche im Internet Archive. ) {{#if: | {{#if: deadurlausgeblendet | | Vorlage:Toter Link/archivebot }} }}Vorlage:Toter Link/Core{{#switch: |no|0|= |#default= {{#if: || }} }}{{#invoke:TemplatePar|check |all = inline= url= |opt = datum= date= archivebot= bot= botlauf= fix-attempted= checked= |cat = Wikipedia:Vorlagenfehler/Vorlage:Toter Link |errNS = 0 |template = Vorlage:Toter Link |format = |preview = 1 }}{{#if: http://lists.apple.com/archives/Objc-language/2006/Aug/msg00039.html | {{#if:{{#invoke:URLutil|isWebURL|http://lists.apple.com/archives/Objc-language/2006/Aug/msg00039.html}} || {{#if: || }} }} }}{{#if: | {{#if:{{#invoke:DateTime|format||F Y|noerror=1}} || {{#if: || }} }} }}{{#switch: deadurl |checked|deadurl|= |#default= {{#if: || }} }}[http://lists.apple.com/archives/Objc-language/2006/Aug/msg00039.html }}|{{#switch: |0|=Vorlage:Toter Link/Core{{#if: http://lists.apple.com/archives/Objc-language/2006/Aug/msg00039.html | {{#if: | [4] }} (Seite {{#switch:|no|0|=|dauerhaft }}nicht mehr abrufbar{{#if: | , festgestellt im {{#invoke:DateTime|format||F Y}} }}. Suche im Internet Archive ){{#if: 2019-05-04 18:40:45 InternetArchiveBot | {{#if: | | Vorlage:Toter Link/archivebot }} }} | (Seite {{#switch:|no|0|=|#default=dauerhaft }}nicht mehr abrufbar{{#if: | , festgestellt im {{#invoke:DateTime|format||F Y}} }}.) }}{{#switch: |no|0|= |#default={{#if: || }} }}{{#invoke:TemplatePar|check |opt = inline= url= text= datum= date= archivebot= bot= botlauf= fix-attempted= checked= |cat = Wikipedia:Vorlagenfehler/Vorlage:Toter Link |errNS = 0 |template = Vorlage:Toter Link |format = |preview = 1 }}{{#if: http://lists.apple.com/archives/Objc-language/2006/Aug/msg00039.html | {{#if:{{#invoke:URLutil|isWebURL|http://lists.apple.com/archives/Objc-language/2006/Aug/msg00039.html}} || {{#if: || }} }} | {{#if: | {{#if: || }} | {{#if: || }} }} }}{{#if: | {{#if:{{#invoke:DateTime|format||F Y|noerror=1}} || {{#if: || }} }} }}{{#switch: |checked|deadurl|= |#default= {{#if: || }} }}|#default= https://wiki-de.moshellshocker.dns64.de/index.php?title=Wikipedia:Defekte_Weblinks&dwl=http://lists.apple.com/archives/Objc-language/2006/Aug/msg00039.html Die nachstehende Seite ist {{#switch:|no|0|=|dauerhaft }}nicht mehr abrufbar]{{#if: | , festgestellt im {{#invoke:DateTime|format||F Y}} }}. (Suche im Internet Archive. ) {{#if: 2019-05-04 18:40:45 InternetArchiveBot | {{#if: | | Vorlage:Toter Link/archivebot }} }}Vorlage:Toter Link/Core{{#switch: |no|0|= |#default= {{#if: || }} }}{{#invoke:TemplatePar|check |all = inline= url= |opt = datum= date= archivebot= bot= botlauf= fix-attempted= checked= |cat = Wikipedia:Vorlagenfehler/Vorlage:Toter Link |errNS = 0 |template = Vorlage:Toter Link |format = |preview = 1 }}{{#if: http://lists.apple.com/archives/Objc-language/2006/Aug/msg00039.html | {{#if:{{#invoke:URLutil|isWebURL|http://lists.apple.com/archives/Objc-language/2006/Aug/msg00039.html}} || {{#if: || }} }} }}{{#if: | {{#if:{{#invoke:DateTime|format||F Y|noerror=1}} || {{#if: || }} }} }}{{#switch: |checked|deadurl|= |#default= {{#if: || }} }}[http://lists.apple.com/archives/Objc-language/2006/Aug/msg00039.html }} }}}}}}}}}}{{#if:2019-05-04 18:40:45 InternetArchiveBot| {{#invoke:Vorlage:Internetquelle|archivBot|stamp=2019-05-04 18:40:45 InternetArchiveBot|text={{#if:https://web.archive.org/web/20090618184513/http://lists.apple.com/archives/Objc-language/2006/Aug/msg00039.html%7CVorlage:Webarchiv/archiv-bot}}
}}}}{{#invoke:TemplatePar|check |all= url= titel= |opt= autor= hrsg= format= sprache= titelerg= werk= seiten= datum= abruf= zugriff= abruf-verborgen= archiv-url= archiv-datum= archiv-bot= kommentar= zitat= AT= CH= offline= |cat= {{#ifeq: 0 | 0 | Wikipedia:Vorlagenfehler/Vorlage:Internetquelle}} |template= Vorlage:Internetquelle |format=0 |preview=1 }}</ref> Laufzeit-Performance-Verbesserungen,<ref>{{#if:2010-11-24|{{#iferror: {{#iferror:{{#invoke:Vorlage:FormatDate|Execute}}|}}| |}}}}{{#if:|{{{autor}}}: }}{{#if:https://web.archive.org/web/20101124014332/http://lists.apple.com/archives/Objc-language/2006/Aug/msg00018.html%7C{{#if:Re: Objective-C 2.0|[{{#invoke:Vorlage:Internetquelle|archivURL|1={{#invoke:URLutil|getNormalized|1=https://web.archive.org/web/20101124014332/http://lists.apple.com/archives/Objc-language/2006/Aug/msg00018.html}}}} {{#invoke:Vorlage:Internetquelle|TitelFormat|titel=Re: Objective-C 2.0}}]{{#if:| ({{{format}}})}}{{#if:| {{{titelerg}}}{{#invoke:Vorlage:Internetquelle|Endpunkt|titel={{{titelerg}}}}}}}}}|{{#if:http://lists.apple.com/archives/Objc-language/2006/Aug/msg00018.html%7C{{#if:{{#invoke:TemplUtl%7Cfaculty%7Cja}}%7C{{#invoke:Vorlage:Internetquelle%7CTitelFormat%7Ctitel={{#invoke:WLink%7CgetEscapedTitle%7C1=Re: Objective-C 2.0}}}}|[{{#invoke:URLutil|getNormalized|1=http://lists.apple.com/archives/Objc-language/2006/Aug/msg00018.html}} {{#invoke:Vorlage:Internetquelle|TitelFormat|titel={{#invoke:WLink|getEscapedTitle|1=Re: Objective-C 2.0}}}}]}}{{#if:| ({{{format}}}{{#if:jaLists.apple.comhttps://web.archive.org/web/20101124014332/http://lists.apple.com/archives/Objc-language/2006/Aug/msg00018.html{{#if: 2010-05-30 | {{#if:{{#invoke:TemplUtl|faculty|}}||1}}}}
| )
| {{#if:{{#ifeq:de|de||{{#if:|1}}}}| ;
| )}}}}}}{{#if:| {{{titelerg}}}{{#invoke:Vorlage:Internetquelle|Endpunkt|titel={{{titelerg}}}}}}}}}}}{{#if:http://lists.apple.com/archives/Objc-language/2006/Aug/msg00018.html%7C{{#if:{{#invoke:URLutil%7CisResourceURL%7C1=http://lists.apple.com/archives/Objc-language/2006/Aug/msg00018.html}}%7C%7C}}}}{{#if:Re: Objective-C 2.0|{{#if:{{#invoke:WLink|isValidLinktext|1=Re: Objective-C 2.0|lines=0}}||}}}}{{#if: | In: {{#invoke:Vorlage:Internetquelle|TitelFormat|titel={{{werk}}}}}}}{{#if: Lists.apple.com| Lists.apple.com{{#if: https://web.archive.org/web/20101124014332/http://lists.apple.com/archives/Objc-language/2006/Aug/msg00018.html%7C,%7C{{#if: 2010-05-30 | {{#if:{{#invoke:TemplUtl|faculty|}}||,}}}}}}}}{{#if: | {{#if:{{#invoke:DateTime|format||noerror=1}}
|{{#invoke:DateTime|format||T._Monat JJJJ}}
|{{#invoke:TemplUtl|failure|1=Fehler bei Vorlage:Internetquelle, datum=|class=Zitationswartung}} }}{{#if: https://web.archive.org/web/20101124014332/http://lists.apple.com/archives/Objc-language/2006/Aug/msg00018.html%7C,%7C{{#if: 2010-05-30 | {{#if:{{#invoke:TemplUtl|faculty|}}||,}}}}}}}}{{#if: | S. {{{seiten}}}{{#if: https://web.archive.org/web/20101124014332/http://lists.apple.com/archives/Objc-language/2006/Aug/msg00018.html%7C,%7C{{#if: 2010-05-30 | {{#if:{{#invoke:TemplUtl|faculty|}}||,}}}}}}}}{{#if: https://web.archive.org/web/20101124014332/http://lists.apple.com/archives/Objc-language/2006/Aug/msg00018.html{{#invoke:TemplUtl%7Cfaculty%7Cja}}%7C+{{#if:Lists.apple.com%7C{{#if:https://web.archive.org/web/20101124014332/http://lists.apple.com/archives/Objc-language/2006/Aug/msg00018.html%7Carchiviert%7Cehemals}}%7C{{#if:https://web.archive.org/web/20101124014332/http://lists.apple.com/archives/Objc-language/2006/Aug/msg00018.html%7CArchiviert%7CEhemals}}}}+{{#if:https://web.archive.org/web/20101124014332/http://lists.apple.com/archives/Objc-language/2006/Aug/msg00018.html%7Cvom%7Cim}}+Vorlage:Referrer{{#if:{{#invoke:TemplUtl|faculty|ja}}| (nicht mehr online verfügbar)}}{{#if: 2010-11-24| am {{#iferror: {{#iferror:{{#invoke:Vorlage:FormatDate|Execute}}|}}|2010-11-24{{#if:19997||(?)}}}}}}{{#if: 2010-05-30|;}}}}{{#if: 2010-05-30| {{#if:Lists.apple.comhttps://web.archive.org/web/20101124014332/http://lists.apple.com/archives/Objc-language/2006/Aug/msg00018.html{{#invoke:TemplUtl%7Cfaculty%7Cja}}%7Cabgerufen%7CAbgerufen}} {{#switch: {{#invoke:Str|len| {{#invoke:DateTime|format| 2010-05-30 |ISO|noerror=1}} }}
|4=im Jahr
|7=im
|10=am
|#default={{#invoke:TemplUtl|failure|1=Fehler bei Vorlage:Internetquelle, abruf=2010-05-30|class=Zitationswartung}} }} {{#invoke:DateTime|format|2010-05-30|T._Monat JJJJ}}
| {{#invoke:TemplUtl|failure|1=Vorlage:Internetquelle | abruf=2026-MM-TT ist Pflichtparameter}} }}{{#if:{{#ifeq:de|de||{{#if:|1}}}}|{{#if:jaLists.apple.comhttps://web.archive.org/web/20101124014332/http://lists.apple.com/archives/Objc-language/2006/Aug/msg00018.html{{#if: 2010-05-30 | {{#if:{{#invoke:TemplUtl|faculty|}}||1}}}}
| (
| {{#if: | | (}}
}}{{#ifeq:{{#if:de|de|de}}|de||
{{#invoke:Multilingual|format|{{{sprache}}}|slang=!|split=[%s,]+|shift=m|separator=, }}}}{{#if: |{{#ifeq:{{#if:de|de|de}}|de||, }}{{{kommentar}}}}})}}{{#if: https://web.archive.org/web/20101124014332/http://lists.apple.com/archives/Objc-language/2006/Aug/msg00018.html{{#if: 2010-05-30 | {{#if:{{#invoke:TemplUtl|faculty|}}||1}} }}|{{#if: |: {{
#if:
| „{{
#ifeq: {{#if:{{#if: {{#invoke:templutl|faculty|}}|de-ch|de}}|{{#if: {{#invoke:templutl|faculty|}}|de-ch|de}}|de}} | de
| Vorlage:Str trim
| {{#invoke:Vorlage:lang|flat}}
}}“
| {{#ifeq: {{#if:{{#if: {{#invoke:templutl|faculty|}}|de-ch|de}}|{{#if: {{#invoke:templutl|faculty|}}|de-ch|de}}|de}} | de
| „Vorlage:Str trim“
| {{#invoke:Text|quote
|1={{#if:
| {{#invoke:Vorlage:lang|flat}}
| {{#invoke:Vorlage:lang|flat}} }}
|2={{#if: {{#invoke:TemplUtl|faculty|}}|de-CH|de}}
|3=1}} }}
}}{{#if:
| (<templatestyles src="Person/styles.css" />{{#if: | : }}{{#if: | , deutsch: „“ }})
| {{#if:
| ({{#if: | , deutsch: „“ }})
| {{#if: | (deutsch: „“) }}
}}
}}{{#if: {{{zitat}}}
| {{#if:
| {{#if: {{{zitat}}}
| Vorlage:": Text= und 1= gleichzeitig, bzw. Pipe zu viel }} }}
| Vorlage:": Text= fehlt }}{{#if: | {{#if: {{#invoke:Text|unstrip|{{{ref}}}}}
| Vorlage:": Ungültiger Wert: ref=
| {{{ref}}} }}
}}|.{{#if:{{#invoke:TemplUtl|faculty|ja}}|{{#if:https://web.archive.org/web/20101124014332/http://lists.apple.com/archives/Objc-language/2006/Aug/msg00018.html%7C%7C{{#ifeq: ja | JaKeinHinweis |{{#switch:
|0|=Vorlage:Toter Link/Core{{#if: http://lists.apple.com/archives/Objc-language/2006/Aug/msg00018.html | {{#if: | [5] }} (Seite {{#switch:|no|0|=|dauerhaft }}nicht mehr abrufbar{{#if: | , festgestellt im {{#invoke:DateTime|format||F Y}} }}. Suche im Internet Archive ){{#if: | {{#if: deadurlausgeblendet | | Vorlage:Toter Link/archivebot }} }} | (Seite {{#switch:|no|0|=|#default=dauerhaft }}nicht mehr abrufbar{{#if: | , festgestellt im {{#invoke:DateTime|format||F Y}} }}.) }}{{#switch: |no|0|= |#default={{#if: || }} }}{{#invoke:TemplatePar|check |opt = inline= url= text= datum= date= archivebot= bot= botlauf= fix-attempted= checked= |cat = Wikipedia:Vorlagenfehler/Vorlage:Toter Link |errNS = 0 |template = Vorlage:Toter Link |format = |preview = 1 }}{{#if: http://lists.apple.com/archives/Objc-language/2006/Aug/msg00018.html | {{#if:{{#invoke:URLutil|isWebURL|http://lists.apple.com/archives/Objc-language/2006/Aug/msg00018.html}} || {{#if: || }} }} | {{#if: | {{#if: || }} | {{#if: || }} }} }}{{#if: | {{#if:{{#invoke:DateTime|format||F Y|noerror=1}} || {{#if: || }} }} }}{{#switch: deadurl |checked|deadurl|= |#default= {{#if: || }} }}|#default= https://wiki-de.moshellshocker.dns64.de/index.php?title=Wikipedia:Defekte_Weblinks&dwl=http://lists.apple.com/archives/Objc-language/2006/Aug/msg00018.html Die nachstehende Seite ist {{#switch:|no|0|=|dauerhaft }}nicht mehr abrufbar]{{#if: | , festgestellt im {{#invoke:DateTime|format||F Y}} }}. (Suche im Internet Archive. ) {{#if: | {{#if: deadurlausgeblendet | | Vorlage:Toter Link/archivebot }} }}Vorlage:Toter Link/Core{{#switch: |no|0|= |#default= {{#if: || }} }}{{#invoke:TemplatePar|check |all = inline= url= |opt = datum= date= archivebot= bot= botlauf= fix-attempted= checked= |cat = Wikipedia:Vorlagenfehler/Vorlage:Toter Link |errNS = 0 |template = Vorlage:Toter Link |format = |preview = 1 }}{{#if: http://lists.apple.com/archives/Objc-language/2006/Aug/msg00018.html | {{#if:{{#invoke:URLutil|isWebURL|http://lists.apple.com/archives/Objc-language/2006/Aug/msg00018.html}} || {{#if: || }} }} }}{{#if: | {{#if:{{#invoke:DateTime|format||F Y|noerror=1}} || {{#if: || }} }} }}{{#switch: deadurl |checked|deadurl|= |#default= {{#if: || }} }}[http://lists.apple.com/archives/Objc-language/2006/Aug/msg00018.html }}|{{#switch: |0|=Vorlage:Toter Link/Core{{#if: http://lists.apple.com/archives/Objc-language/2006/Aug/msg00018.html | {{#if: | [6] }} (Seite {{#switch:|no|0|=|dauerhaft }}nicht mehr abrufbar{{#if: | , festgestellt im {{#invoke:DateTime|format||F Y}} }}. Suche im Internet Archive ){{#if: 2019-05-04 18:40:45 InternetArchiveBot | {{#if: | | Vorlage:Toter Link/archivebot }} }} | (Seite {{#switch:|no|0|=|#default=dauerhaft }}nicht mehr abrufbar{{#if: | , festgestellt im {{#invoke:DateTime|format||F Y}} }}.) }}{{#switch: |no|0|= |#default={{#if: || }} }}{{#invoke:TemplatePar|check |opt = inline= url= text= datum= date= archivebot= bot= botlauf= fix-attempted= checked= |cat = Wikipedia:Vorlagenfehler/Vorlage:Toter Link |errNS = 0 |template = Vorlage:Toter Link |format = |preview = 1 }}{{#if: http://lists.apple.com/archives/Objc-language/2006/Aug/msg00018.html | {{#if:{{#invoke:URLutil|isWebURL|http://lists.apple.com/archives/Objc-language/2006/Aug/msg00018.html}} || {{#if: || }} }} | {{#if: | {{#if: || }} | {{#if: || }} }} }}{{#if: | {{#if:{{#invoke:DateTime|format||F Y|noerror=1}} || {{#if: || }} }} }}{{#switch: |checked|deadurl|= |#default= {{#if: || }} }}|#default= https://wiki-de.moshellshocker.dns64.de/index.php?title=Wikipedia:Defekte_Weblinks&dwl=http://lists.apple.com/archives/Objc-language/2006/Aug/msg00018.html Die nachstehende Seite ist {{#switch:|no|0|=|dauerhaft }}nicht mehr abrufbar]{{#if: | , festgestellt im {{#invoke:DateTime|format||F Y}} }}. (Suche im Internet Archive. ) {{#if: 2019-05-04 18:40:45 InternetArchiveBot | {{#if: | | Vorlage:Toter Link/archivebot }} }}Vorlage:Toter Link/Core{{#switch: |no|0|= |#default= {{#if: || }} }}{{#invoke:TemplatePar|check |all = inline= url= |opt = datum= date= archivebot= bot= botlauf= fix-attempted= checked= |cat = Wikipedia:Vorlagenfehler/Vorlage:Toter Link |errNS = 0 |template = Vorlage:Toter Link |format = |preview = 1 }}{{#if: http://lists.apple.com/archives/Objc-language/2006/Aug/msg00018.html | {{#if:{{#invoke:URLutil|isWebURL|http://lists.apple.com/archives/Objc-language/2006/Aug/msg00018.html}} || {{#if: || }} }} }}{{#if: | {{#if:{{#invoke:DateTime|format||F Y|noerror=1}} || {{#if: || }} }} }}{{#switch: |checked|deadurl|= |#default= {{#if: || }} }}[http://lists.apple.com/archives/Objc-language/2006/Aug/msg00018.html }} }}}}}}}}}}{{#if:2019-05-04 18:40:45 InternetArchiveBot| {{#invoke:Vorlage:Internetquelle|archivBot|stamp=2019-05-04 18:40:45 InternetArchiveBot|text={{#if:https://web.archive.org/web/20101124014332/http://lists.apple.com/archives/Objc-language/2006/Aug/msg00018.html%7CVorlage:Webarchiv/archiv-bot}}
}}}}{{#invoke:TemplatePar|check |all= url= titel= |opt= autor= hrsg= format= sprache= titelerg= werk= seiten= datum= abruf= zugriff= abruf-verborgen= archiv-url= archiv-datum= archiv-bot= kommentar= zitat= AT= CH= offline= |cat= {{#ifeq: 0 | 0 | Wikipedia:Vorlagenfehler/Vorlage:Internetquelle}} |template= Vorlage:Internetquelle |format=0 |preview=1 }}</ref> und Unterstützung für 64-Bit-Plattformen.
Wesentliche Eigenschaften
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 Smalltalk ist das Fehlen von Blöcken. 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.)
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 objc_msg_send() 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 @.
Dynamisches Binden
Eine bemerkenswerte Eigenschaft von Objective-C ist das dynamische Binden von Methoden. Polymorphie ist im Gegensatz zu Sprachen, die auf Simula-67 basieren, nicht nur innerhalb einer Klassenhierarchie möglich, sondern auch darüber hinaus. Eine Methode mit einem bestimmten Namen (Selector) kann von Objekten jeder Klasse 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.
Dynamische Typisierung und typloses id
Es ist daher für den Absender nicht notwendig, die Klasse des Empfängers zu kennen. Vielmehr existiert ein Typ id, der für jedes Instanzobjekt jeder Klasse stehen kann. Analoges gilt für den Versand von Nachrichten an Klassenobjekte durch die Typisierung Class.
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.
Nachrichten
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 SEL (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.
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.<ref><templatestyles src="Webarchiv/styles.css" />{{#if:20110607233026
| {{#ifeq: 20110607233026 | *
| {{#if: Beispielvideo von Apple | {{#invoke:WLink|getEscapedTitle|Beispielvideo von Apple}} | {{#invoke:Webarchiv|getdomain|http://developer.apple.com/cocoa/coredatatutorial/}} }} (Archivversionen)
| {{#iferror: {{#time: j. F Y|20110607233026}}
| {{#if: || }}Der Wert des Parameters {{#if: wayback | wayback | Datum }} muss ein gültiger Zeitstempel der Form YYYYMMDDHHMMSS sein!
| {{#if: Beispielvideo von Apple | {{#invoke:WLink|getEscapedTitle|Beispielvideo von Apple}} | {{#invoke:Webarchiv|getdomain|http://developer.apple.com/cocoa/coredatatutorial/}} }} {{#ifeq: | [] | [ | ( }}{{#if: {{#if: | {{{archiv-bot}}} | }} | des Vorlage:Referrer }} vom {{#time: j. F Y|20110607233026}} im Internet Archive{{#if: | ; }}{{#ifeq: | [] | ] | ) }}
}}
}}
| {{#if:
| {{#iferror: {{#time: j. F Y|{{{webciteID}}}}}
| {{#switch: {{#invoke:Str|len|{{{webciteID}}}}}
| 16= {{#if: Beispielvideo von Apple | {{#invoke:WLink|getEscapedTitle|Beispielvideo von Apple}} | {{#invoke:Webarchiv|getdomain|http://developer.apple.com/cocoa/coredatatutorial/}} }} {{#ifeq: | [] | [ | ( }}{{#if: {{#if: | {{{archiv-bot}}} | }} | des Vorlage:Referrer }} vom {{#time: j. F Y| 19700101000000 + {{#expr: floor {{#expr: {{#invoke:Str|sub|{{{webciteID}}}|1|10}}/86400}} }} days}} auf WebCite{{#if: | ; }}{{#ifeq: | [] | ] | ) }}
| 9 = {{#if: Beispielvideo von Apple | {{#invoke:WLink|getEscapedTitle|Beispielvideo von Apple}} | {{#invoke:Webarchiv|getdomain|http://developer.apple.com/cocoa/coredatatutorial/}} }} {{#ifeq: | [] | [ | ( }}{{#if: {{#if: | {{{archiv-bot}}} | }} | des Vorlage:Referrer}} vom {{#time: j. F Y| 19700101000000 + {{#expr: floor {{#expr: {{#invoke:Str|sub|{{#invoke:Expr|base62|{{{webciteID}}}}}|1|10}}/86400}} }} days}} auf WebCite{{#if: | ; }}{{#ifeq: | [] | ] | ) }}
| #default= Der Wert des Parameters {{#if: webciteID | webciteID | ID }} muss entweder ein Zeitstempel der Form YYYYMMDDHHMMSS oder ein Schüsselwert mit 9 Zeichen oder eine 16-stellige Zahl sein!{{#if: || }}
}}
| c|{{{webciteID}}}}} {{#if: Beispielvideo von Apple | {{#invoke:WLink|getEscapedTitle|Beispielvideo von Apple}} | {{#invoke:Webarchiv|getdomain|http://developer.apple.com/cocoa/coredatatutorial/}} }} ({{#if: {{#if: | {{{archiv-bot}}} | }} | des Vorlage:Referrer}} vom {{#time: j. F Y|{{{webciteID}}}}} auf WebCite{{#if: | ; }}{{#ifeq: | [] | ] | ) }}
}}
| {{#if:
| Vorlage:Webarchiv/Today
| {{#if:
| Vorlage:Webarchiv/Generisch
| {{#if: Beispielvideo von Apple | {{#invoke:WLink|getEscapedTitle|Beispielvideo von Apple}} | {{#invoke:Webarchiv|getdomain|http://developer.apple.com/cocoa/coredatatutorial/}} }}
}}}}}}}}{{#if:
| Vorlage:Webarchiv/archiv-bot
}}{{#invoke:TemplatePar|check
|all = url=
|opt = text= wayback= webciteID= archive-is= archive-today= archiv-url= archiv-datum= ()= archiv-bot= format= original=
|cat = Wikipedia:Vorlagenfehler/Vorlage:Webarchiv
|errNS = 0
|template = Vorlage:Webarchiv
|format = *
|preview = 1
}}{{#ifexpr: {{#if:20110607233026|1|0}}{{#if:|+1}}{{#if:|+1}}{{#if:|+1}}{{#if:|+1}} <> 1
| {{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Genau einer der Parameter 'wayback', 'webciteID', 'archive-today', 'archive-is' oder 'archiv-url' muss angegeben werden.|1}}
}}{{#if:
| {{#switch: {{#invoke:Webarchiv|getdomain|{{{archiv-url}}}}}
| web.archive.org =
{{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von Internet Archive erkannt, bitte Parameter 'wayback' benutzen.|1}}
| webcitation.org =
{{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von WebCite erkannt, bitte Parameter 'webciteID' benutzen.|1}}
| archive.today |archive.is |archive.ph |archive.fo |archive.li |archive.md |archive.vn =
{{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von archive.today erkannt, bitte Parameter 'archive-today' benutzen.|1}}
}}{{#if:
| {{#iferror: {{#iferror:{{#invoke:Vorlage:FormatDate|Execute}}|}}
| {{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Wert des Parameter 'archiv-datum' ist ungültig oder hat ein ungültiges Format.|1}}
| }}
| {{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Pflichtparameter 'archiv-datum' wurde nicht angegeben.|1}}
}}
| {{#if:
| {{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Parameter 'archiv-datum' ist nur in Verbindung mit 'archiv-url' angebbar.|1}}
}}
}}{{#if:{{#invoke:URLutil|isHostPathResource|http://developer.apple.com/cocoa/coredatatutorial/}}
|| {{#if: || }}
}}{{#if: Beispielvideo von Apple
| {{#if: {{#invoke:WLink|isBracketedLink|Beispielvideo von Apple}}
| {{#if: || }}
}}
| {{#if: || }}
}}{{#switch:
|addlarchives|addlpages= {{#if: || }}{{#if: 1 |}}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: enWP-Wert im Parameter 'format'.|1}}
}}{{#ifeq: {{#invoke:Str|find|http://developer.apple.com/cocoa/coredatatutorial/%7Carchiv}} |-1
|| {{#ifeq: {{#invoke:Str|find|{{#invoke:Str|cropleft|http://developer.apple.com/cocoa/coredatatutorial/%7C4}}%7Chttp}} |-1
|| {{#switch: {{#invoke:Webarchiv|getdomain|http://developer.apple.com/cocoa/coredatatutorial/ }}
| abendblatt.de | daserste.ndr.de | inarchive.com | webcitation.org =
| #default = {{#if: || }}{{#if: 1 |}}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Archiv-URL im Parameter 'url' anstatt URL der Originalquelle. Entferne den vor der Original-URL stehenden Mementobestandteil und setze den Archivierungszeitstempel in den Parameter 'wayback', 'webciteID', 'archive.today' oder 'archive-is' ein, sofern nicht bereits befüllt.|1}}
}}
}}
}}</ref> In der Praxis entfällt damit ein Großteil der Programmierarbeit.
Kategorien
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.
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 NSNumber erzeugt, so hat diese ebenfalls die vorgenannte Methode. Damit ist es möglich, vollständig fremden Klassen Methoden hinzuzufügen.
Protokolle
Ähnlich wie in Java mit Interfaces lassen sich in Objective-C Sätze von Methoden in Protokollen zusammenfassen.
RTTI/Reflexion
Zur Laufzeit wird zu jedem Objekt, mittels RTTI, 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.
Klassenobjekte
In Objective-C existieren nicht nur Instanzobjekte (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 Singletons. Klassenmethoden werden durch ein vorangestelltes + gekennzeichnet.
Da es sich um Objekte handelt, können diese zugewiesen werden. Sie haben selbst den Typ Class. Es existiert eine Instanzmethode -class und eine Klassenmethode +class, um das Klassenobjekt zu erhalten.
Bemerkenswert ist in diesem Zusammenhang die Eigenschaft, dass es für diese Klassenobjekte einen self-Zeiger gibt, der der Polymorphie zugänglich ist.
Syntax
Die Syntax 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 Smalltalk. 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.
Klassendefinition
Um seine eigene Art von Objekten zu erstellen, muss man sie in einer Klasse beschreiben. Dazu wird im @interface-Teil – gewöhnlich in einer Header-Datei – die Klasse und deren Methoden definiert.
Klassenbezeichnung und Vererbung
<syntaxhighlight lang="objc"> @interface Bruch : NSObject <Protokoll0, Protokoll1> </syntaxhighlight>
Jede Klasse hat einen Namen, der konventionsgemäß mit einem Großbuchstaben beginnt und im CamelCase 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.
Instanzvariablen
Es folgt in geschweiften Klammern die Liste der Instanzvariablen.
<syntaxhighlight lang="objc"> {
NSInteger zaehler; NSInteger nenner;
} </syntaxhighlight>
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.
Properties (Eigenschaften)
Nach den Instanzvariablen ist es seit Objective-C 2 möglich, Eigenschaften (Attribute oder Beziehungen) aufzulisten. Die Definition einer Property hat die Form
<syntaxhighlight lang="objc"> @property( Attributliste ) Typ name; </syntaxhighlight>
Die Attribute lassen sich hinsichtlich des Schreibschutzes, des Referenzmodelles und der Atomarität unterscheiden.
- Für den Schreibschutz existieren die Attribute readonly und readwrite (Default)
- Atomarität: Durch das Attribut „nonatomic“ 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 „atomic“ angegeben.<ref>{{#if:|{{#iferror: {{#iferror:{{#invoke:Vorlage:FormatDate|Execute}}|}}| |}}}}{{#if:|{{{autor}}}: }}{{#if:|{{#if:Declared Properties|[{{#invoke:Vorlage:Internetquelle|archivURL|1={{#invoke:URLutil|getNormalized|1={{{archiv-url}}}}}}} {{#invoke:Vorlage:Internetquelle|TitelFormat|titel=Declared Properties}}]{{#if:| ({{{format}}})}}{{#if:| {{{titelerg}}}{{#invoke:Vorlage:Internetquelle|Endpunkt|titel={{{titelerg}}}}}}}}}|{{#if:http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocProperties.html#//apple_ref/doc/uid/TP30001163-CH17-SW1%7C{{#if:{{#invoke:TemplUtl%7Cfaculty%7C}}%7C{{#invoke:Vorlage:Internetquelle%7CTitelFormat%7Ctitel={{#invoke:WLink%7CgetEscapedTitle%7C1=Declared Properties}}}}|[{{#invoke:URLutil|getNormalized|1=http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocProperties.html#//apple_ref/doc/uid/TP30001163-CH17-SW1}} {{#invoke:Vorlage:Internetquelle|TitelFormat|titel={{#invoke:WLink|getEscapedTitle|1=Declared Properties}}}}]}}{{#if:| ({{{format}}}{{#if:The Objective-C Programming LanguageApple2011-10-12{{#if: 2012-01-21 | {{#if:{{#invoke:TemplUtl|faculty|}}||1}}}}
| )
| {{#if:{{#ifeq:en|de||{{#if:en|1}}}}| ;
| )}}}}}}{{#if:| {{{titelerg}}}{{#invoke:Vorlage:Internetquelle|Endpunkt|titel={{{titelerg}}}}}}}}}}}{{#if:http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocProperties.html#//apple_ref/doc/uid/TP30001163-CH17-SW1%7C{{#if:{{#invoke:URLutil%7CisResourceURL%7C1=http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocProperties.html#//apple_ref/doc/uid/TP30001163-CH17-SW1}}%7C%7C}}}}{{#if:Declared Properties|{{#if:{{#invoke:WLink|isValidLinktext|1=Declared Properties|lines=0}}||}}}}{{#if: The Objective-C Programming Language| In: {{#invoke:Vorlage:Internetquelle|TitelFormat|titel=The Objective-C Programming Language}}}}{{#if: Apple| Apple{{#if: 2011-10-12|,|{{#if: 2012-01-21 | {{#if:{{#invoke:TemplUtl|faculty|}}||,}}}}}}}}{{#if: 2011-10-12| {{#if:{{#invoke:DateTime|format|2011-10-12|noerror=1}}
|{{#invoke:DateTime|format|2011-10-12|T._Monat JJJJ}}
|{{#invoke:TemplUtl|failure|1=Fehler bei Vorlage:Internetquelle, datum=2011-10-12|class=Zitationswartung}} }}{{#if: |,|{{#if: 2012-01-21 | {{#if:{{#invoke:TemplUtl|faculty|}}||,}}}}}}}}{{#if: | S. {{{seiten}}}{{#if: |,|{{#if: 2012-01-21 | {{#if:{{#invoke:TemplUtl|faculty|}}||,}}}}}}}}{{#if: {{#invoke:TemplUtl|faculty|}}| {{#if:2011-10-12Apple|{{#if:|archiviert|ehemals}}|{{#if:|Archiviert|Ehemals}}}} {{#if:|vom|im}} Vorlage:Referrer{{#if:{{#invoke:TemplUtl|faculty|}}| (nicht mehr online verfügbar)}}{{#if: | am {{#iferror: {{#iferror:{{#invoke:Vorlage:FormatDate|Execute}}|}}|{{{archiv-datum}}}{{#if:19997||(?)}}}}}}{{#if: 2012-01-21|;}}}}{{#if: 2012-01-21| {{#if:2011-10-12Apple{{#invoke:TemplUtl|faculty|}}|abgerufen|Abgerufen}} {{#switch: {{#invoke:Str|len| {{#invoke:DateTime|format| 2012-01-21 |ISO|noerror=1}} }}
|4=im Jahr
|7=im
|10=am
|#default={{#invoke:TemplUtl|failure|1=Fehler bei Vorlage:Internetquelle, abruf=2012-01-21|class=Zitationswartung}} }} {{#invoke:DateTime|format|2012-01-21|T._Monat JJJJ}}
| {{#invoke:TemplUtl|failure|1=Vorlage:Internetquelle | abruf=2026-MM-TT ist Pflichtparameter}} }}{{#if:{{#ifeq:en|de||{{#if:en|1}}}}|{{#if:The Objective-C Programming LanguageApple2011-10-12{{#if: 2012-01-21 | {{#if:{{#invoke:TemplUtl|faculty|}}||1}}}}
| (
| {{#if: | | (}}
}}{{#ifeq:{{#if:en|en|de}}|de||
{{#invoke:Multilingual|format|en|slang=!|split=[%s,]+|shift=m|separator=, }}}}{{#if: |{{#ifeq:{{#if:en|en|de}}|de||, }}{{{kommentar}}}}})}}{{#if: 2011-10-12{{#if: 2012-01-21 | {{#if:{{#invoke:TemplUtl|faculty|}}||1}} }}en|{{#if: |: {{
#if:
| „{{
#ifeq: {{#if:{{#if: {{#invoke:templutl|faculty|}}|de-ch|de}}|{{#if: {{#invoke:templutl|faculty|}}|de-ch|de}}|de}} | de
| Vorlage:Str trim
| {{#invoke:Vorlage:lang|flat}}
}}“
| {{#ifeq: {{#if:{{#if: {{#invoke:templutl|faculty|}}|de-ch|de}}|{{#if: {{#invoke:templutl|faculty|}}|de-ch|de}}|de}} | de
| „Vorlage:Str trim“
| {{#invoke:Text|quote
|1={{#if:
| {{#invoke:Vorlage:lang|flat}}
| {{#invoke:Vorlage:lang|flat}} }}
|2={{#if: {{#invoke:TemplUtl|faculty|}}|de-CH|de}}
|3=1}} }}
}}{{#if:
| (<templatestyles src="Person/styles.css" />{{#if: | : }}{{#if: | , deutsch: „“ }})
| {{#if:
| ({{#if: | , deutsch: „“ }})
| {{#if: | (deutsch: „“) }}
}}
}}{{#if: {{{zitat}}}
| {{#if:
| {{#if: {{{zitat}}}
| Vorlage:": Text= und 1= gleichzeitig, bzw. Pipe zu viel }} }}
| Vorlage:": Text= fehlt }}{{#if: | {{#if: {{#invoke:Text|unstrip|{{{ref}}}}}
| Vorlage:": Ungültiger Wert: ref=
| {{{ref}}} }}
}}|.{{#if:{{#invoke:TemplUtl|faculty|}}|{{#if:||{{#ifeq: | JaKeinHinweis |{{#switch:
|0|=Vorlage:Toter Link/Core{{#if: http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocProperties.html#//apple_ref/doc/uid/TP30001163-CH17-SW1 | {{#if: | [7] }} (Seite {{#switch:|no|0|=|dauerhaft }}nicht mehr abrufbar{{#if: | , festgestellt im {{#invoke:DateTime|format||F Y}} }}. Suche im Internet Archive ){{#if: | {{#if: deadurlausgeblendet | | Vorlage:Toter Link/archivebot }} }} | (Seite {{#switch:|no|0|=|#default=dauerhaft }}nicht mehr abrufbar{{#if: | , festgestellt im {{#invoke:DateTime|format||F Y}} }}.) }}{{#switch: |no|0|= |#default={{#if: || }} }}{{#invoke:TemplatePar|check |opt = inline= url= text= datum= date= archivebot= bot= botlauf= fix-attempted= checked= |cat = Wikipedia:Vorlagenfehler/Vorlage:Toter Link |errNS = 0 |template = Vorlage:Toter Link |format = |preview = 1 }}{{#if: http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocProperties.html#//apple_ref/doc/uid/TP30001163-CH17-SW1 | {{#if:{{#invoke:URLutil|isWebURL|http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocProperties.html#//apple_ref/doc/uid/TP30001163-CH17-SW1}} || {{#if: || }} }} | {{#if: | {{#if: || }} | {{#if: || }} }} }}{{#if: | {{#if:{{#invoke:DateTime|format||F Y|noerror=1}} || {{#if: || }} }} }}{{#switch: deadurl |checked|deadurl|= |#default= {{#if: || }} }}|#default= https://wiki-de.moshellshocker.dns64.de/index.php?title=Wikipedia:Defekte_Weblinks&dwl=http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocProperties.html#//apple_ref/doc/uid/TP30001163-CH17-SW1 Die nachstehende Seite ist {{#switch:|no|0|=|dauerhaft }}nicht mehr abrufbar]{{#if: | , festgestellt im {{#invoke:DateTime|format||F Y}} }}. (Suche im Internet Archive. ) {{#if: | {{#if: deadurlausgeblendet | | Vorlage:Toter Link/archivebot }} }}Vorlage:Toter Link/Core{{#switch: |no|0|= |#default= {{#if: || }} }}{{#invoke:TemplatePar|check |all = inline= url= |opt = datum= date= archivebot= bot= botlauf= fix-attempted= checked= |cat = Wikipedia:Vorlagenfehler/Vorlage:Toter Link |errNS = 0 |template = Vorlage:Toter Link |format = |preview = 1 }}{{#if: http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocProperties.html#//apple_ref/doc/uid/TP30001163-CH17-SW1 | {{#if:{{#invoke:URLutil|isWebURL|http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocProperties.html#//apple_ref/doc/uid/TP30001163-CH17-SW1}} || {{#if: || }} }} }}{{#if: | {{#if:{{#invoke:DateTime|format||F Y|noerror=1}} || {{#if: || }} }} }}{{#switch: deadurl |checked|deadurl|= |#default= {{#if: || }} }}[http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocProperties.html#//apple_ref/doc/uid/TP30001163-CH17-SW1 }}|{{#switch: |0|=Vorlage:Toter Link/Core{{#if: http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocProperties.html#//apple_ref/doc/uid/TP30001163-CH17-SW1 | {{#if: | [8] }} (Seite {{#switch:|no|0|=|dauerhaft }}nicht mehr abrufbar{{#if: | , festgestellt im {{#invoke:DateTime|format||F Y}} }}. Suche im Internet Archive ){{#if: | {{#if: | | Vorlage:Toter Link/archivebot }} }} | (Seite {{#switch:|no|0|=|#default=dauerhaft }}nicht mehr abrufbar{{#if: | , festgestellt im {{#invoke:DateTime|format||F Y}} }}.) }}{{#switch: |no|0|= |#default={{#if: || }} }}{{#invoke:TemplatePar|check |opt = inline= url= text= datum= date= archivebot= bot= botlauf= fix-attempted= checked= |cat = Wikipedia:Vorlagenfehler/Vorlage:Toter Link |errNS = 0 |template = Vorlage:Toter Link |format = |preview = 1 }}{{#if: http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocProperties.html#//apple_ref/doc/uid/TP30001163-CH17-SW1 | {{#if:{{#invoke:URLutil|isWebURL|http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocProperties.html#//apple_ref/doc/uid/TP30001163-CH17-SW1}} || {{#if: || }} }} | {{#if: | {{#if: || }} | {{#if: || }} }} }}{{#if: | {{#if:{{#invoke:DateTime|format||F Y|noerror=1}} || {{#if: || }} }} }}{{#switch: |checked|deadurl|= |#default= {{#if: || }} }}|#default= https://wiki-de.moshellshocker.dns64.de/index.php?title=Wikipedia:Defekte_Weblinks&dwl=http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocProperties.html#//apple_ref/doc/uid/TP30001163-CH17-SW1 Die nachstehende Seite ist {{#switch:|no|0|=|dauerhaft }}nicht mehr abrufbar]{{#if: | , festgestellt im {{#invoke:DateTime|format||F Y}} }}. (Suche im Internet Archive. ) {{#if: | {{#if: | | Vorlage:Toter Link/archivebot }} }}Vorlage:Toter Link/Core{{#switch: |no|0|= |#default= {{#if: || }} }}{{#invoke:TemplatePar|check |all = inline= url= |opt = datum= date= archivebot= bot= botlauf= fix-attempted= checked= |cat = Wikipedia:Vorlagenfehler/Vorlage:Toter Link |errNS = 0 |template = Vorlage:Toter Link |format = |preview = 1 }}{{#if: http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocProperties.html#//apple_ref/doc/uid/TP30001163-CH17-SW1 | {{#if:{{#invoke:URLutil|isWebURL|http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocProperties.html#//apple_ref/doc/uid/TP30001163-CH17-SW1}} || {{#if: || }} }} }}{{#if: | {{#if:{{#invoke:DateTime|format||F Y|noerror=1}} || {{#if: || }} }} }}{{#switch: |checked|deadurl|= |#default= {{#if: || }} }}[http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocProperties.html#//apple_ref/doc/uid/TP30001163-CH17-SW1 }} }}}}}}}}}}{{#if:| {{#invoke:Vorlage:Internetquelle|archivBot|stamp={{{archiv-bot}}}|text={{#if:|Vorlage:Webarchiv/archiv-bot}}
}}}}{{#invoke:TemplatePar|check |all= url= titel= |opt= autor= hrsg= format= sprache= titelerg= werk= seiten= datum= abruf= zugriff= abruf-verborgen= archiv-url= archiv-datum= archiv-bot= kommentar= zitat= AT= CH= offline= |cat= {{#ifeq: 0 | 0 | Wikipedia:Vorlagenfehler/Vorlage:Internetquelle}} |template= Vorlage:Internetquelle |format=0 |preview=1 }}</ref>
- Die Referenzierung wird über die Wörter „assign“ (Default) als reine Zuweisung im Setter auch dann, wenn der Typ der Property ein Instanzzeiger ist, „retain“ als Referenz im Sinne des Reference-Countings (der Parameter erhält die Nachricht „retain“) und „copy“, wenn der Setter eine Kopie anfertigen soll (der Parameter erhält die Nachricht „copy“), beschrieben.
Werden nur Default-Eigenschaften verwendet, so kann die Attributliste samt Klammer weggelassen werden:
<syntaxhighlight lang="objc"> @property NSInteger zaehler; </syntaxhighlight>
Wird jedoch der Code mit Referenzzählung 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.
<syntaxhighlight lang="objc"> @property NSInteger zaehler; // NSInteger ist ein C-Typ. @property( copy ) NSString* name; // NSString* ist ein Instanzzeiger. </syntaxhighlight>
Methodendeklarationen
Als Nächstes folgt eine Liste von Methoden:
<syntaxhighlight lang="objc"> - (void) printLn; - (float) floatValue; </syntaxhighlight>
Jede einzelne Methodendeklaration beginnt zunächst mit einem ‚+‘ (Klassenmethode) oder ‚-‘ (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.
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:
<syntaxhighlight lang="objc"> - (id)initWithZaehler:(NSInteger)zaehler andNenner:(NSInteger)nenner; </syntaxhighlight>
Abgeschlossen wird die Deklaration mit einem Semikolon.
Die Klassendefinition wird mit @end abgeschlossen.
Implementierung
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:
<syntaxhighlight lang="objc"> - (id)initWithZaehler:(NSInteger)zaehler andNenner:(NSInteger)nenner {
// Code hier
} </syntaxhighlight>
Es sei darauf hingewiesen, dass die Bezeichner der formalen Parameter nicht denen aus der Methodendeklaration entsprechen müssen. Synthetisierte Methoden sind die Zugriffsmethoden für die Eigenschaften:
<syntaxhighlight lang="objc"> @synthesize zaehler, nenner; </syntaxhighlight>
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 eigenschaft und setEigenschaft (nur bei readwrite) tragen müssen:
<syntaxhighlight lang="objc"> - (NSInteger)zaehler { return zaehler; } - (void)setZaehler:(NSInteger)value { zaehler = value; } </syntaxhighlight>
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:
<syntaxhighlight lang="objc"> @dynamic zaehler; // Zugriffsmethoden werden zur Laufzeit gehandhabt. </syntaxhighlight>
Nachrichten
Da Objective-C zwischen Nachricht 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:
<syntaxhighlight lang="objc"> [Empfänger Nachricht] </syntaxhighlight>
Soll eine Nachricht an ein Klassenobjekt verschickt werden, damit eine Klassenmethode ausgeführt wird, so schreibt man einfach die Klasse als Empfänger hin:
<syntaxhighlight lang="objc"> Bruch* bruch = [Bruch alloc]; // +alloc ist Klassenmethode </syntaxhighlight>
Bei Nachrichten an die Instanzmethode wird deren Zeiger verwendet:
[bruch initWithZaehler:3 andNenner:4];
Wie ersichtlich, werden dabei die Parameter eingesetzt und mittels Leerzeichen, nicht Komma, getrennt.
Nachrichten können auch verschachtelt werden. Z. B.
<syntaxhighlight lang="objc"> NSString *string = @"Hallo Welt"; NSData *data = [NSData dataWithBytes:[string cString] length:[string cStringLength]]; </syntaxhighlight>
Hiermit wird ein neues Objekt der Klasse NSData erstellt. Die Bytes, die in das neue Objekt kopiert werden, werden mit [string cString] erfragt, die Länge des Blocks mit [string cStringLength].
Es werden also die Rückgabewerte der Methoden verwendet. Dies geht auch beim Empfänger, zum Beispiel: <syntaxhighlight lang="objc"> Bruch* bruch = [[Bruch alloc] init] </syntaxhighlight>
Das Objekt, das mit [Klasse alloc] erzeugt wurde, bekommt die Botschaft init.
Locking
Objective-C bietet eine Syntax für Locks bei Threading an. Hierzu wird ein Code-Abschnitt mit dem Schlüsselwort @synchronized eingeleitet, welches als Parameter ein Objekt als Lock erhält:
<syntaxhighlight lang="objc"> @synchronized( anInstance ) {
// Exklusiver Code für den Lock anInstance
} </syntaxhighlight>
Exceptions
Exceptionhandling erfolgt in Objective-C mittels @try, @catch, @finally und @throw;
Geworfen wird eine Exception – unmittelbar mit Sprachmitteln – mittels des Schlüsselwortes @throw;
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 @catch-Block kann die Exception erneut geworfen werden und wird dann von einem äußeren Exceptionhandler behandelt.
Klassenobjekt
Objective-C besitzt so genannte Klassenobjekte. Nicht nur die Instanzen, sondern auch die Klassen sind Objekte und können Nachrichten empfangen, wie oben [Klasse alloc]. – Zum Instanziieren sind damit keine zusätzlichen Sprachelemente wie Konstruktoren und Schlüsselwörter nötig.
In der Klassendefinition werden Klassenmethoden mit ‚+‘, Instanzmethoden mit ‚-‘ gekennzeichnet.
+alloc 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 +initialize, die vor Verwendung einer Klasse aufgerufen wird, standardmäßig leer und kann für klassenbezogene Vorauseinstellungen überschrieben werden.
Typkonzept
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: <syntaxhighlight lang="objc"> [obj class] // bestimmt die Klasse </syntaxhighlight> <syntaxhighlight lang="objc"> [obj respondsToSelector:] // bestimmt, ob eine Methode vorhanden ist </syntaxhighlight> <syntaxhighlight lang="objc"> [obj conformsToProtocol:] // bestimmt, ob ein Protokoll implementiert ist </syntaxhighlight>
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.
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.
Spätes Binden
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:
<syntaxhighlight lang="objc">
Klasse A methode() Klasse B von Klasse A methode() Klasse C methode() ...
</syntaxhighlight>
Zu diesem Zweck führt Objective-C zur Laufzeit umfangreiche Informationen über ein Objekt mit, was über RTTI 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.
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.
Programmbeispiel <syntaxhighlight lang="objc"> NSMutableDictionary *aDictionary = [[NSMutableDictionary alloc] init];
[aDictionary setObject: @"foo" forKey: @"Foo"]; [aDictionary setObject: @"bar" forKey: @"Bar"]; [aDictionary setObject: @"Hallo Welt!" forKey: @"Hello, world!"];
NSLog([aDictionary objectForKey: @"Hello, world!"]);
[aDictionary release]; </syntaxhighlight>
Ausgabe: Hallo Welt!
Objective-C++
Objective-C++ ist ein Frontend der GNU Compiler Collection sowie LLVM/Clang, 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:
- C++-Klassen können nicht von Objective-C-Klassen erben.
- Umgekehrt können Objective-C-Klassen auch nicht von C++-Klassen erben.
- Innerhalb einer Objective-C-Deklaration kann man keine C++-Namensräume deklarieren.
- C++-Klassen, die keinen Defaultkonstruktor haben, oder die virtuelle Funktionen haben, können nicht als Instanzvariablen einer Objective-C-Klasse verwendet werden. Wohl aber kann man Zeiger auf solche Klassen verwenden.
- Objective-C-Objekte können nicht als Wertparameter verwendet werden, da sie nur über Zeiger ansprechbar sind.
- Objective-C-Deklarationen können nicht in C++-Template-Deklarationen benutzt werden, und umgekehrt. Jedoch können Objective-C-Typen (wie z. B. Klassenname *) als C++-Template-Parameter benutzt werden.
- Die Ausnahmebehandlungsmechanismen 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.
- 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.
Ein typischer Anwendungsbereich von Objective-C++ ist zum Beispiel die Verwendung einer C++-Bibliothek in einer Objective-C-Anwendung.
Objective-C 2.0
Im Oktober 2007 hat Apple mit Mac OS X Leopard Objective-C 2.0 ausgeliefert, eine Erweiterung von Objective-C, die „moderne Garbage Collection, Syntaxerweiterungen, Verbesserungen der Laufzeitleistung und 64-Bit-Unterstützung umfasst“.<ref><templatestyles src="Webarchiv/styles.css" />{{#if:20100724195423
| {{#ifeq: 20100724195423 | *
| {{#if: Apple – Objective-C 2.0 Overview | {{#invoke:WLink|getEscapedTitle|Apple – Objective-C 2.0 Overview}} | {{#invoke:Webarchiv|getdomain|http://developer.apple.com/leopard/overview/objectivec2.html}} }} (Archivversionen)
| {{#iferror: {{#time: j. F Y|20100724195423}}
| {{#if: || }}Der Wert des Parameters {{#if: wayback | wayback | Datum }} muss ein gültiger Zeitstempel der Form YYYYMMDDHHMMSS sein!
| {{#if: Apple – Objective-C 2.0 Overview | {{#invoke:WLink|getEscapedTitle|Apple – Objective-C 2.0 Overview}} | {{#invoke:Webarchiv|getdomain|http://developer.apple.com/leopard/overview/objectivec2.html}} }} {{#ifeq: | [] | [ | ( }}{{#if: {{#if: | {{{archiv-bot}}} | }} | des Vorlage:Referrer }} vom {{#time: j. F Y|20100724195423}} im Internet Archive{{#if: | ; }}{{#ifeq: | [] | ] | ) }}
}}
}}
| {{#if:
| {{#iferror: {{#time: j. F Y|{{{webciteID}}}}}
| {{#switch: {{#invoke:Str|len|{{{webciteID}}}}}
| 16= {{#if: Apple – Objective-C 2.0 Overview | {{#invoke:WLink|getEscapedTitle|Apple – Objective-C 2.0 Overview}} | {{#invoke:Webarchiv|getdomain|http://developer.apple.com/leopard/overview/objectivec2.html}} }} {{#ifeq: | [] | [ | ( }}{{#if: {{#if: | {{{archiv-bot}}} | }} | des Vorlage:Referrer }} vom {{#time: j. F Y| 19700101000000 + {{#expr: floor {{#expr: {{#invoke:Str|sub|{{{webciteID}}}|1|10}}/86400}} }} days}} auf WebCite{{#if: | ; }}{{#ifeq: | [] | ] | ) }}
| 9 = {{#if: Apple – Objective-C 2.0 Overview | {{#invoke:WLink|getEscapedTitle|Apple – Objective-C 2.0 Overview}} | {{#invoke:Webarchiv|getdomain|http://developer.apple.com/leopard/overview/objectivec2.html}} }} {{#ifeq: | [] | [ | ( }}{{#if: {{#if: | {{{archiv-bot}}} | }} | des Vorlage:Referrer}} vom {{#time: j. F Y| 19700101000000 + {{#expr: floor {{#expr: {{#invoke:Str|sub|{{#invoke:Expr|base62|{{{webciteID}}}}}|1|10}}/86400}} }} days}} auf WebCite{{#if: | ; }}{{#ifeq: | [] | ] | ) }}
| #default= Der Wert des Parameters {{#if: webciteID | webciteID | ID }} muss entweder ein Zeitstempel der Form YYYYMMDDHHMMSS oder ein Schüsselwert mit 9 Zeichen oder eine 16-stellige Zahl sein!{{#if: || }}
}}
| c|{{{webciteID}}}}} {{#if: Apple – Objective-C 2.0 Overview | {{#invoke:WLink|getEscapedTitle|Apple – Objective-C 2.0 Overview}} | {{#invoke:Webarchiv|getdomain|http://developer.apple.com/leopard/overview/objectivec2.html}} }} ({{#if: {{#if: | {{{archiv-bot}}} | }} | des Vorlage:Referrer}} vom {{#time: j. F Y|{{{webciteID}}}}} auf WebCite{{#if: | ; }}{{#ifeq: | [] | ] | ) }}
}}
| {{#if:
| Vorlage:Webarchiv/Today
| {{#if:
| Vorlage:Webarchiv/Generisch
| {{#if: Apple – Objective-C 2.0 Overview | {{#invoke:WLink|getEscapedTitle|Apple – Objective-C 2.0 Overview}} | {{#invoke:Webarchiv|getdomain|http://developer.apple.com/leopard/overview/objectivec2.html}} }}
}}}}}}}}{{#if:
| Vorlage:Webarchiv/archiv-bot
}}{{#invoke:TemplatePar|check
|all = url=
|opt = text= wayback= webciteID= archive-is= archive-today= archiv-url= archiv-datum= ()= archiv-bot= format= original=
|cat = Wikipedia:Vorlagenfehler/Vorlage:Webarchiv
|errNS = 0
|template = Vorlage:Webarchiv
|format = *
|preview = 1
}}{{#ifexpr: {{#if:20100724195423|1|0}}{{#if:|+1}}{{#if:|+1}}{{#if:|+1}}{{#if:|+1}} <> 1
| {{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Genau einer der Parameter 'wayback', 'webciteID', 'archive-today', 'archive-is' oder 'archiv-url' muss angegeben werden.|1}}
}}{{#if:
| {{#switch: {{#invoke:Webarchiv|getdomain|{{{archiv-url}}}}}
| web.archive.org =
{{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von Internet Archive erkannt, bitte Parameter 'wayback' benutzen.|1}}
| webcitation.org =
{{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von WebCite erkannt, bitte Parameter 'webciteID' benutzen.|1}}
| archive.today |archive.is |archive.ph |archive.fo |archive.li |archive.md |archive.vn =
{{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von archive.today erkannt, bitte Parameter 'archive-today' benutzen.|1}}
}}{{#if:
| {{#iferror: {{#iferror:{{#invoke:Vorlage:FormatDate|Execute}}|}}
| {{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Wert des Parameter 'archiv-datum' ist ungültig oder hat ein ungültiges Format.|1}}
| }}
| {{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Pflichtparameter 'archiv-datum' wurde nicht angegeben.|1}}
}}
| {{#if:
| {{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Parameter 'archiv-datum' ist nur in Verbindung mit 'archiv-url' angebbar.|1}}
}}
}}{{#if:{{#invoke:URLutil|isHostPathResource|http://developer.apple.com/leopard/overview/objectivec2.html}}
|| {{#if: || }}
}}{{#if: Apple – Objective-C 2.0 Overview
| {{#if: {{#invoke:WLink|isBracketedLink|Apple – Objective-C 2.0 Overview}}
| {{#if: || }}
}}
| {{#if: || }}
}}{{#switch:
|addlarchives|addlpages= {{#if: || }}{{#if: 1 |}}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: enWP-Wert im Parameter 'format'.|1}}
}}{{#ifeq: {{#invoke:Str|find|http://developer.apple.com/leopard/overview/objectivec2.html%7Carchiv}} |-1
|| {{#ifeq: {{#invoke:Str|find|{{#invoke:Str|cropleft|http://developer.apple.com/leopard/overview/objectivec2.html%7C4}}%7Chttp}} |-1
|| {{#switch: {{#invoke:Webarchiv|getdomain|http://developer.apple.com/leopard/overview/objectivec2.html }}
| abendblatt.de | daserste.ndr.de | inarchive.com | webcitation.org =
| #default = {{#if: || }}{{#if: 1 |}}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Archiv-URL im Parameter 'url' anstatt URL der Originalquelle. Entferne den vor der Original-URL stehenden Mementobestandteil und setze den Archivierungszeitstempel in den Parameter 'wayback', 'webciteID', 'archive.today' oder 'archive-is' ein, sofern nicht bereits befüllt.|1}}
}}
}}
}}</ref>
Die GNU Laufzeitumgebung für Objective-C unterstützt diese Erweiterungen seit GCC 4.6.
Garbage Collection
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 Garbage Collector für Objective-C 2.0.
Properties
Objective-C 2.0 führt eine neue Syntax ein, mit der man Instanzvariablen als Properties deklarieren kann. Die Syntax unterstützt optionale Attribute, welche die Zugriffsmethoden näher definieren: Eine Property kann als readonly deklariert werden, und kann mit verschiedenen Verhaltensregeln zur Speicherverwaltung wie assign, copy oder retain versehen werden.
Properties werden mit dem Schlüsselwort @synthesize implementiert, welches Getter und Setter-Methoden gemäß der Property-Deklaration erzeugt. Alternativ kann man auch das Schlüsselwort @dynamic 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 @dynamic, 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 Managed Objects der Fall, die zur Laufzeit Akzessoren aus der geladenen Beschreibungsstruktur der Entität erzeugen.
Dot-Notation
Auf Akzessoren, gleichgültig ob explizit definiert oder über eine Property angelegt, kann mit der aus anderen Sprachen bekannten Punkt-Notation zugegriffen werden.
Hierbei erfolgt allerdings kein unkontrollierter Zugriff auf die Instanzvariable, sondern es werden die Akzessoren -eigenschaft und set- Eigenschaft verwendet.
Um die Punktnotation innerhalb einer Instanzmethode zu verwenden, benutzt man das Schlüsselwort self. Auf die Eigenschaften einer Instanz kann auch dynamisch per Reflexion zugegriffen werden.
Schnelle Enumeration
Ab 2.0 stellt Objective-C die „for-in“-Syntax zur Verfügung, um durch eine Kollektion zu iterieren (sie zu durchlaufen).
<syntaxhighlight lang="objc"> // alt iterieren NSEnumerator *enumerator = [thePeople objectEnumerator]; Person *p;
while ((p = [enumerator nextObject]) != nil) {
NSLog(@"%@ is %i years old.", [p name], [p age]);
} </syntaxhighlight>
<syntaxhighlight lang="objc"> // alternativ iterieren for (int i = 0; i < [thePeople count]; i++) {
Person *p = [thePeople objectAtIndex:i]; NSLog(@"%@ is %i years old.", [p name], [p age]);
} </syntaxhighlight>
<syntaxhighlight lang="objc"> // neu iterieren for (Person *p in thePeople) {
NSLog(@"%@ is %i years old.", [p name], [p age]);
} </syntaxhighlight>
Vergleich zu anderen Programmiersprachen
C++
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.
Funktionalitätserweiterung
Objective-C bietet Kategorien als Lösungsmöglichkeit an. Hierbei wird nachträglich der Methodensatz einer Klasse erweitert.
Siehe auch
Literatur
- NeXT Computer, Inc. (Hrsg.): Object-Oriented Programming and the Objective C Language, NeXTSTEP Developers Library Release 3. Addison-Wesley, Reading, Mass. 1993, ISBN 0-201-63251-9.
- Brad J. Cox, Andrew J. Novobilski: Object-Oriented Programming: an evolutionary approach. 2. Auflage. Addison-Wesley, Reading, Mass. 1991, ISBN 0-201-54834-8. (Einführung vom Autor dieser Sprache).
- Stephen Kochan: Programming in Objective-C. Sams, 2003, ISBN 0-672-32586-1 (englisch).
- Aaron Hillegass: Cocoa: Programmierung für Mac OS X. 3. Ausgabe. Mitp-Verlag, Heidelberg 2008, ISBN 978-3-8266-5960-7.
- {{#invoke:Vorlage:Literatur|f}}
- {{#invoke:Vorlage:Literatur|f}}
- {{#invoke:Vorlage:Literatur|f}}
- {{#invoke:Vorlage:Literatur|f}}
- {{#invoke:Vorlage:Literatur|f}}
- {{#invoke:Vorlage:Literatur|f}}
- {{#invoke:Vorlage:Literatur|f}}
- {{#invoke:Vorlage:Literatur|f}}
Weblinks
|X|x= |0|-= |S|s= – Sammlung von Bildern |1|= – Sammlung von Bildern{{#if:
| {{#switch: {{#invoke:TemplUtl|faculty|1}}/{{#invoke:TemplUtl|faculty|1}}
|1/= und Videos
|1/1=, Videos und Audiodateien
|/1= und Audiodateien}}
| , Videos und Audiodateien
}}
|#default= – }}{{#if:
| {{#ifeq: {{#invoke:Str|left||9}}
| category:
| FEHLER: Ohne Category: angeben!}}}}Vorlage:Wikidata-Registrierung
- About Objective-C auf developer.apple.com (Stand: 17. September 2014)
- Objective-C Beispiele und Tutorials zu verschiedenen Themen
- Object-Oriented Programming and The Objective-C Language
- Objective-C FAQ
Einzelnachweise
<references />
{{#ifeq: s | p | | {{#if: 4335874-3 | |
}} }}{{#ifeq:||{{#if: | [[Kategorie:Wikipedia:GND fehlt {{#invoke:Str|left|{{{GNDCheck}}}|7}}]] }}{{#if: | {{#if: | | }} }} }}{{#if: | {{#ifeq: 0 | 2 | | }} }}{{#if: | {{#ifeq: 0 | 2 | | }} }}{{#ifeq: s | p | {{#if: 4335874-3 | | {{#if: {{#statements:P227}} | | }} }} }}{{#ifeq: s | p | {{#if: 4335874-3 | {{#if: {{#invoke:Wikidata|pageId}} | {{#if: {{#statements:P227}} | | }} }} }} }}{{#ifeq: s | p | {{#if: | | {{#if: {{#statements:P244}} | | }} }} }}{{#ifeq: s | p | {{#if: | {{#if: {{#invoke:Wikidata|pageId}} | {{#if: {{#statements:P244}} | | }} }} }} }}{{#ifeq: s | p | {{#if: | | {{#if: {{#statements:P214}} | | }} }} }}{{#ifeq: s | p | {{#if: | {{#if: {{#invoke:Wikidata|pageId}} | {{#if: {{#statements:P214}} | | }} }} }} }}Vorlage:Wikidata-Registrierung
- Wikipedia:Vorlagenfehler/Parameter:URL
- Wikipedia:Vorlagenfehler/Parameter:Linktext
- Wikipedia:Vorlagenfehler/Parameter:Datum
- Wikipedia:Vorlagenfehler/Vorlage:"
- Wikipedia:Weblink offline fix-attempted
- Wikipedia:Vorlagenfehler/Vorlage:Toter Link
- Wikipedia:Vorlagenfehler/Vorlage:Toter Link/URL fehlt
- Seiten mit defekten Dateilinks
- Wikipedia:Vorlagenfehler/Vorlage:Webarchiv
- Wikipedia:Vorlagenfehler/Vorlage:Webarchiv/Archiv-URL
- Wikipedia:Vorlagenfehler/Vorlage:Webarchiv/Linktext fehlt
- Wikipedia:Vorlagenfehler/Schwesterprojekt
- Wikipedia:GND fehlt
- Wikipedia:Normdaten-TYP falsch oder fehlend
- Wikipedia:GND in Wikipedia fehlt, in Wikidata vorhanden
- Wikipedia:GND in Wikipedia vorhanden, fehlt jedoch in Wikidata
- Wikipedia:LCCN in Wikipedia fehlt, in Wikidata vorhanden
- Wikipedia:LCCN in Wikipedia vorhanden, fehlt jedoch in Wikidata
- Wikipedia:VIAF in Wikipedia fehlt, in Wikidata vorhanden
- Wikipedia:VIAF in Wikipedia vorhanden, fehlt jedoch in Wikidata
- Objective-C
- NeXT
- MacOS-Software
- GNUstep
- Objektorientierte Programmiersprache