Tianyu LIU: Hey, hvordan er går det alle? Og dette er iOS App programmering af Objective C seminar. Og mit navn er Tianyu Liu. Jeg er en Lowell junior lige nu, koncentrerer i datalogi. Så i dette seminar er jeg vil lære jer lidt om hvordan man laver en app. Yay, få glade for det. Så før vi overhovedet begynder dykning ind i selve programmering side, lad os bare virkelig hurtigt tale om hvorfor du måske ønsker at opbygge en iOS app? Hvorfor er iOS så fantastisk? Så det første problem, det første ting, der er temmelig awesome for os, især som CS50 studerende, er, at iOS bruger Mål C. Tja, der er et nyt sprog kaldet Swift, men vi kommer ikke til at bruge det i dette seminar. Hvis du er interesseret i Swift, der er en selvstændig seminar om. Men Objective C er dybest set en overordnet C. Betydning at alt hvad du bruger i C kan oversættes til Objective C meget let. Som du kan se senere, at ja Der er nogle meget grundlæggende syntaks, er dybest set nøjagtig det samme, C og Objective C. Så siden du har taget CS50 op så langt, du allerede kender Objective C, mindst 40%. Også Apple har en virkelig robust API til iOS. Der er en masse virkelig skøre ting, du kan gøre med det. Hvoraf den ene er en faktisk skabt en iOS app til styring biler, som er temmelig interessant. Sandsynligvis en helikopter er mere spændende. Men det er, hvordan magtfulde iOS API kan være. Og som du måske har regnet ud lige nu, stakken overløb er formentlig en af de vigtigste online-ressourcer til rådighed for dig. Og gode nyheder, for hver enkelt problem kan du muligvis tænke på, mens opbygge din afgangsprojekt i Objective C, Der er sandsynligvis en stakoverløb svar. Det er bare fantastisk. Hertil kommer, at, iOS er virkelig en platform hvor du kan nå en enorm publikum med lille indsats. Det er ikke ligesom Android, hvor alt er temmelig fragmenteret. Alt iOS er forenet. Og så længe du opretter en app til en iPhone, Du kan meget let port, til iPad, iPad mini, eller forskellige iPhone størrelser. Disse er alle virkelig praktisk. Og det er bare rigtig god for imponerende dine venner. Du kan bare holde en iPhone og fortæl din ven hey, det er den app jeg laver. Du kan gøre det for enhver desktop apps, hvilket er rart. Okay, lad os nu rent faktisk får til det sprog Formål C. Så hvorfor skal vi ikke starte med nogle virkelig grundlæggende syntaks. Som jeg nævnte før mål C Det er dybest set en overordnet C. Så en masse grundlæggende syntaks er faktisk nøjagtig det samme. Erklære en variabel og tilføje to variabler sammen er præcis som vi har gjort i Mario. Intet nyt her. Tilsvarende logerende for løkke og tilstand er også den samme. Du kan gøre en for-løkke, ligesom du har gjort i en Mario [uhørligt]. Og du kan gøre vilkår ligesom hvad du har gjort i dine tidligere p-apparater. Men Objective C ikke er helt C, og der er noget, er lidt underligt om det. Den første er, at når du er gør C programmering, du typisk kalder indeholde og derefter et bibliotek navn. Men i Objective C kalder at importere. Dybest set siger funktionalitet, bare forskellige navne. Og strengene er faktisk en lille smule underligt. Du kan se, at den første ting, der er lidt underligt er, at du har en temmelig weird-- sorry-- du har en temmelig underlige NS log herovre. Og den anden ting det er lidt underligt er du har et snabel før faktisk erklære strengen. Så snabel dybest set betyder at en streng er ikke kun en streng, det er faktisk et objekt. Vi kommer til at forklare der senere så ikke panik, hvis du ikke gør forstå, hvad det betyder. Og udskrivning til konsollen er en lille smule anderledes, fordi i C, vi kalder printf, men i Objective C, vi kalder [uhørligt]. Du kan være undrende hvad er det. Det er dybest set printf, bare et andet sprog. Præcis det samme forbrug, nøjagtig samme funktionalitet. Jamen det viser sig, at Objective C faktisk har en ns præfiks i næsten alt, hver grundlæggende datatype, NSString, nsarray, nsdictionary. Årsagen er, at ns faktisk står for Next Step, som er en virksomhed, Steve Jobs har grundlagt, som er en virksomhed, hvor den sprog Objective C er født. Så det er dybest set tradition. Jeg ved, det er en lille smule underligt, men det er Apple. Så noget, der er endnu mere mærkelig end der er en funktion erklæring. Det er meget forskelligt fra det, vi se i C, for her er det faktisk ikke ligner C længere. Hvad du har her-- af måde, dette ikke er et led, dette er et minustegn. Du har en minustegn parentes ugyldige og derefter funktionen navn. Lad os bare sige, hvis vi har hej verden, så afkastet type ville være ugyldige fordi vi vender tilbage ingenting. Hvad får virkelig underligt er, at når du er har mere end én parameter passerer ind i en samme funktion, vil være virkelig underligt, som vist her. Vi har en metode navn, kaldet addInt til [uhørligt] og vi passerer en parameter. Men efter det, vi har mere metodenavnet opkald med. Og efter med vi passerer den anden parameter. Dette er faktisk en lille smule underligt, Men alle disse funktionserklæringer følger det samme mønster som dette. Vi har et minus at begynde med. Minustegnet kunne være et plustegn undertiden baseret på, hvad slags metode er det. Metode er dybest set et andet navn for funktionen. Og vi vil forklarer, at senere, når vi taler om objekt orienteret programmering. Du skal først angive tilbagevenden skrive i parenteser, hvorefter kommer fremgangsmåden navn. Du passerer en parameter. Og hvis du har flere parametre du har brug for at udvide metoden navn og dybest set skrive noget mere her. Det kunne være noget, du ønsker. I vores tilfælde er det med. Men du kunne sige ende, eller, eller, eller abc fuld bar, hvad du vil. Og så efter at du er passerer parameter f. Dette er en virkelig underlig konvention men vi er kommer til at se, hvorfor Apple ønskede at gøre det meget hurtigt. Så hvordan kan du kalde funktionen? Opkald til en funktion i mål C er også forskellig fra C. Faktisk, at kalde en funktion i Objective C er mere som du taler med nogen. Her har vi selv, som kaldes et objekt. Du er dybest set fortælle objekt selv at sige "Hello World!" Det er sådan, at kalde funktionen. Et objekt og en fremgangsmåde navn kombineres med hinanden. Og det er her, den underlige udvidelse for metoden navn virkelig kommer i spil. Lad os se på det andet eksempel. Vi har lige fastlagt en metode, der kaldes addInt med bla bla bla. Så i dette tilfælde, når du ringer den specifikke [? besked?] det vil at ligne selv addInt: 10 med: 2. Det lyder som engelsk. Selvom funktionen funktionserklæringen er underligt, punktet af mål C'er metode erklæring mønster, er, at når du ringer funktionen eller metoden det vil lyde som faktiske engelsk. Så det er meget intuitivt når du kommer ind i det. Især i dette tilfælde, hvor du kan stort set se, at funktionen navn er slags dokumentere selv. Du behøver ikke nogen mere forklaring for at se hvad der præcist sker, hvad præcis én parameter gør. Går ud over det, lad os tale lidt lidt om objektorienteret programmering. Objektorienteret programmering er en af ​​de grundlæggende programmering teknikker eller mønstre, der er bruges af mål C. Objective C kaldes Objective C, ikke C, for en virkelig god grund. Så før vi kommer ind i Objective C syntaks, Lad os virkelig hurtigt se på hvad der præcist er et objekt. Vi har sikkert gjort noget lignende objekt før, hvilket kaldes struct, når du er gennemførelse et træ eller en sammenkædet liste eller [? prøve. ?] Så det er dybest set som en struct, men det er langt mere magtfulde end det. Et formål har metoder og egenskaber. Metoder er grundlæggende funktioner. Fungerer Dybest set, at en for et bestemt objekt. Og egenskaber er dybest set den felt, du angiver i struct. Så for hver enkelt genstand vi har nogle ejendom der har nogle variable, der er specifikke for objektet. Og vi har nogle funktioner, som er også specifik for objektet. Og de funktioner kaldes metoder og variablerne kaldes egenskaber. Det er bare en fancy navn. Mens du faktisk hver enkelt visning du se, mens du åbner en iOS app, lad os bare sige Twitter eller Facebook, hver enkelt visning, du ser, er et objekt. Og selv hele app et objekt til at begynde med. Meget interessant koncept. Og hvorfor ønsker vi objekt orienteret programmering? Så du kan forestille dig, at når du program, det bliver temmelig kompliceret. Lad os bare sige, når du er gennemførelse skakbræt, logikken vil være virkelig kompliceret. Du har 36 forskellige stykker, således at hvis man ønsker at skrive logik for alle 36 forskellige stykker i skak, der kommer til at være en masse forskellige funktioner og variabler. Det er en masse besvær. Og sandsynligvis du vil skrive en anden metode eller anden funktion for hvert af stykket til præcis styre, hvad de gør. Men hvis du gør objektorienterede programmering, alle disse stykker kan indvindes i en enkelt genstand. Og objektet vil have nogle fælles egenskaber, ligesom hvilken slags stykke er det? Hvilken farve er det? Hvordan kan det bevæge sig? Og på den måde har du i høj grad forenklet logik det. Så det er bare en rigtig god måde at gøre komplicerede programmer, og hierarkisk forhold i programmet, meget enkel. Som vi kommer til at se hvorfor meget hurtigt, når vi faktisk gør programming-- når vi er faktisk gør et S-kode programmeringen senere. Nå ud over denne, objektorienteret programmering er bare en masse sjov. Du fik at designe din egen objekt. Du fik til at designe hvad betyder det ligner ved dig selv. Der er ingen rigtige svar på det. Og det er helt interessant. Så i objektorienteret programmering, to grundlæggende begreber vil være klasse og instans. En klasse er dybest set en skabelon til objekt. Og en instans er dybest set en bestemt genstand. Lad os bare sige, at du laver en cookie. I dette tilfælde hver enkelt cookie du faktisk ender med bliver et objekt. Men cookie plade, du bruger til at bage alle cookies vil være en klasse. En klasse er dybest set en skabelon. Og eksempel vil være en specifik objekt skabt ud af denne klasse. Og en instans vil blive oprettet baseret på klasse erklæring, som vi vil se i senere dias. Så lad os rent faktisk gør en virkelig hurtig eksempel [uhørligt]. Lad os sige, vi erklære et objekt for en kat. Objektet skal have-- katten klasse bør har nogle egenskaber og metoder. Hvilken slags egenskaber skal de klasse have-- skal katten have? For eksempel, farve, alder og race, der vil være variable, er specifikke for hver kat. Og dem er nogle ting som vi bruger til at beskrive en kat. Hvilken slags metode, eller hvad kan en kat gøre? Nogle hurtige eksempler kunne være chase mus, spise fisk eller bare meow. Dette er en virkelig hurtig eksempel på kat klasse. Og en rigtig specifik cat objekt vil være en kat hvor vi specificere farve, alder og race. I så fald vores objekt er ikke længere en klasse længere. Vi kopierer skabelonen fra klassen og vi angiver hver specifikke oplysninger til det specifikke objekt at det er uafhængigt. Og når du ringer en metode i et objekt, du bare ringe meow på objektet, der er katten, du lige har oprettet. Sandsynligvis vil du udskrive noget lignende "Hello World! Meow ". Temmelig sød. Okay, lad os bare komme ind i nogle detaljer og se, hvad der præcist gør, at udslag i at være iOS programmering. Så i iOS programmering hver eneste klasse vil blive gennemført i to filer. En fil er her, som kaldes grænsefladen. En anden fil er her, som kaldes gennemførelse. Typisk grænsefladen vil have extension.h som vi har set i C-biblioteker. Og implementering fil er vil have extension.n. Det er lidt underligt. Men .N betyder faktisk .c, er der ingen grundlæggende forskel mellem dem, to. Så i dette tilfælde, kan vi se, at vi er erklære interface, Cat: objekt. Det kaldes arv. Vi dybest set arve kat klasse fra objektet klassen. Så hver egenskab og metode, der var tidligere defineret i objektet klasse vil automatisk blive defineret i en kat klasse samt. Ud over, at vi definerer farve, race og alder, tre variabler. Det faktisk ligner noget du har gjort før. Det ligner struct. Det er dybest set den syntaks for struct erklæring, og det er helt korrekt. Og da jeg nævnte før, forskellen en struct og et objekt, en af ​​de grundlæggende forskelle er, at et objekt har metode, mens en struct kun variabler. Så ud over de egenskaber, eller variable, vi har oprettet til formålet, vi angiver nogle metode. Lad os bare sige her har vi to metoder, den ene er meow, en anden er chase mus. Vi sandsynligvis vil være passerer en parameter baseret på vores tidligere metode erklæring mønster. Du ønsker sikkert at være forbi en mus. Og du vil sikkert gerne at returnere en bool giver til hvis din kat har med succes fanget musen eller ej. Dette er grænsefladen, men vi kan se, at grænsefladen faktisk ikke gør noget. Det bare fortæller et program hvad exists-- hvad der findes i kattens klassen. Så, for at program til at gøre noget, vi nødt til at have med gennemførelsen filer. Så her er det første, vi gør, er naturligvis vi importerer grænsefladen. Når vi importerer grænsefladen, vi definerer metoden. Lad os bare sige her meow ville bare udskrive "Hello World!" til konsollen. Og efter gennemførelsen fil, vi temmelig meget gjort. Dette er dybest set en klasse erklæring for en klasse. Så nu er spørgsmålet bliver, hvordan kan du erklære en variabel? Den måde, du bruger en klasse til at skabe en objekt i Objective C er skrevet her. Du skal først angive, at dette er en kat pointer, fordi hvert objekt i Objective C endeligt implementeret som en pointer. Og du kalder klassen, kalde dem som Alloc, der egentlig malloc, fortæller operativsystemet, som du brug for nogle hukommelse til dette objekt. Efter at du har et objekt allerede, og du bare initialisere det. Dette er blot konvention. Jeg ved, det er, er en lille smule underligt, men det er faktisk, hvordan Apple gør ting. Tildeling egenskaber faktisk temmelig ligetil. Det er meget lig hvad du laver, når du tildele nogle specifikke felt inde i struct. Du skal bare nødt variablen navn, ejendommen navn, og tildele en bestemt værdi til den. Og kalde en metode er meget ens. Den kaldende metode er dybest set, hvad jeg taler om til at kalde enhver metode i mål C. Du passerer et objekt, i dette tilfælde vil være myCat, og du passerer den metode navn. Som om du taler med objektet, myCat, som du bør meow. Det er temmelig interessant. Efter at der er en mere afgørende design mønster at vi er nødt til at tale om før det bliver til egentlige S-kode. Det mønster kaldes hændelsesstyret programmering. Dette er sandsynligvis også en af ​​de mest grundlæggende ideer i iOS programmering. Så har du sandsynligvis ikke ved, hvad der præcist er hændelsesdrevet programmering, men det er egentlig ikke så skræmmende. Godt i virkeligheden, har du allerede gjort før. Dette er en af ​​de linjer, du har sikkert allerede skrevet i den sidste [uhørligt] af CS50, google.maps.event.addListener (markør, "Klik", function () {}) :. Ved at kalde denne linje, du er væsentlige fortæller computeren at når begivenhed kaldet "Klik" sker på markøren, bruge denne funktion. Dette er meget forskelligt fra hvad du gør i mario.c. I mario.c du bare køre programmet én gang, det giver dig en udgang, og du er færdig. Disse er lidt ligesom en shot programmer. Møde- og drevne programmer er meget, meget anderledes. Lad os forestille os, hvis Facebook er en et shot program det ikke er virkelig god. Du skal bare gå til Facebook én gang, og det er gjort. Det giver dig nogle output og du aldrig fik det tilbage. Du har aldrig fået noget mere. Så her, især mønsteret vi bruger, er hændelsesstyrede så hver funktion vil fanges baseret på, hvad hændelse er sket. For eksempel, hvis vi har en knap, og vi angiver at når der klikkes på knappen, kalder funktionen kaldet "Hello World!" På den måde kan vi virkelig styre funktionen logik flow i en meget fleksibel måde. Brugeren kan gøre eller kalde en funktion der allerede er blevet kaldt. Det er helt baseret på, hvad brugere gør. Så vi kan se, at dette er faktisk meget bedre end mario.c. Og gode nyhed er, at det er faktisk ikke et nyt koncept. Du fyre har allerede gjort at der i sidste problem indstillet. Så i Objective C er der tre forskellige diagrammer for drevet begivenhed programmering. Det første diagram er kaldet målrettet aktion, hvor man binder en knap Tryk med nogen funktion. Lad os bare sige, når du klikker nogle knap, du kalder en funktion. Det er meget enkelt målrettet aktion. Den anden er faktisk hårdest en, det hedder delegation protokol. Vi kommer til at forklare at i detaljer senere. Og den tredje vej er meddelelse. Dette er faktisk ikke meget vigtigt så vidt da vi er bekymret, fordi chancen at du kommer til at bruge anmeldelsen i din endelige projekt er temmelig lav. Så vi kommer til at springe denne del. Og vi kommer til at dykke ind delegation på protokollen. Så hvad er en protokol? Eller hvad er en delegation? Lad os tale om protokol til at starte med. Protokoller er intet andet end arrangementer. Men disse begivenheder er givet til du af Apple til at starte med. For eksempel er jeg ikke helt sikker på, hvor mange af jer fyre bruger Apples originale app mail eller kontakt, men hver gang du rulle tabel, og tryk på bestemt celle på bordet, som er en begivenhed. Og hvis du vil gøre denne begivenhed ved dig selv, det er faktisk lidt svært. Så Apple har givet, at selv til dig så du bare kan direkte bruge begivenheden at gøre noget på egen hånd. Protokoller er faktisk virkelig, virkelig meget udbredt i mål C. Godt i Faktisk hver enkelt app har noget fanget app delegeret. Inde i sarte er alle de protokoller for indlæsning af app. Lad os bare sige, at der er en begivenhed for app gjorde belastning. Så hvad der skal ske, når du har skabt en app, når du åbner app, når du lukker app, eller efter du sætter iPhone på vågeblus. Disse er alle begivenheder, der har allerede er givet til dig. Og oprindeligt inde i disse partikler der vil være nogen gennemførelse. Apple har lige fortalt dig, at denne funktion vil ske, når nogle hændelse sker, men hvad du gør med det Funktionen er helt op til dig. Delegationen er dybest set fortæller klassen at du skal håndtere disse protokoller. Det er en lille smule forvirrende, men det vil være meget klarere, når vi gør S-koder i aktion. Delegation på protokollen er faktisk en robust mekanisme i den forstand at hvis vi gør delegation til en bestemt klasse, Vi kan i det væsentlige håndtere alle former for arrangementer bruger nogen klasse vi har, meget praktisk værktøj. Så en hurtig eksempel for delegation på protokol vil være, hvad jeg lige talte om. Denne protokol specifikt kaldes tableview [uhørligt] vælge rolle i [? indeks?] [? tidligere. ?] Så dette en begivenhed, der ville blive fanget, når man faktisk trykke på en bestemt celle i din tableview, lad os bare sige i din post eller i din kontaktpersoner app. Inde i en funktion, der var oprindeligt ikke at gøre noget. Funktionen ikke gøre noget som standard. Men du kan angive hvad funktionen gør, givet, hvad du vil have ud af din app. Meget praktisk værktøj. Og med alt, er sagt, jeg dybest set dække nogle meget grundlæggende syntaks og grundlæggende koncept for Objective C programmering, og vi kan gøre nogle s kode. Meget mere spændende. Så s kode er faktisk en lidt overvældende når du åbner den for første gang. En hurtig bemærkning, så hvis du ønsker at gøre iOS udvikling, Jeg anbefaler du har en Mac. Fordi at gøre iOS udvikling på Windows er virkelig, virkelig hårdt. Det er doable, men det er virkelig hårdt. Og du helt sikkert gøre ikke ønsker at bruge g redigere. Så i s kode vi har flere forskellige områder. Når du først åbner s kode vil du se en navigation område, som dybest set viser dig alle de filer, der er i dit nuværende projekt. Du har en værktøjslinje område, som er dybest set administrerende synspunkter, eller nogle lidt hurtig redskaber om s selve koden. Og dette er den egentlige redaktør området. Dette område er meget lig g redigere, men meget bedre end g redigere. Og i denne ret område, er kaldet utility-området. Området bliver virkelig praktisk når du opretter interface eller angive nogle hurtige opsætninger til din app. Og det sidste område er debugging. Dette område indeholder konsollen. Så når du siger printf, eller NSLog i vores tilfælde, alle dine resultater er skal udskrives her. Okay? Jeg tror vi kan virkelig hurtigt gøre et eksempel til iOS programmering. Og lad os faktisk åbne s kode. Så hver gang du åbner op s kode, er det kommer til at dukke op noget lignende. Det kommer til at spørge dig hvad vil du gøre? Har du lyst til at starte noget tilfældig, en legeplads, dybest set du kan bare teste koden uden faktisk forpligte sig til enhver app. Ønsker du at oprette et nyt projekt? Eller ønsker du at fortsætte arbejder på det eksisterende projekt? I vores tilfælde vil vi at oprette et nyt projekt. Så det er virkelig rart, S kode har faktisk allerede givet dig nogle skabeloner for at skabe objekter. Hvis du ønsker at gøre et spil, s kode faktisk har et spil skabelon for dig, har siden baserede applikationer, Fanen baseret applikation. I dette tilfælde vil vi at gøre noget meget simpelt, og vi kommer til at bruge en enkelt visning ansøgning. Efter det lige hvad du vil kalde dit produkt, og hvad er dit navn, hvad er din id, og hvilket sprog bruger du. Her ønsker vi ikke at tjek at bruge Core Data. Core Data er dybest set en databasing iOS. Hvis du gør Core Data, s koden skal definere en meget mere kompliceret klasser for dig. Så for at holde alt enkel, vi er bare at undvære Core Data lige nu. Det problem, vi kommer til at være bruger, er at-- problemet vi kommer til at være at skabe er, at vi dybest set ønsker at importere Mario fra C til en iOS app. Så lad os kalde det Mario-iOS. Selvfølgelig du angive, hvad du ønsker at sætte i dit projekt. Og der vi gå. Så dette er en lille smule overvældende, men dette er faktisk hvad vi lige har set på dias. Og det første område ser vi lige nu er dybest set projekt konfiguration. Så alt, hvad du ønsker at gøre projekt, hvilken type enhed, lad os bare sige, hvilken type enhed ønsker du din app til at blive vist på? Er det iPhone, iPad eller universel? Så enhed orientering, alle disse ting. Ikke meget vigtigt, men kunne være, men dette er et sted, hvor du oprette dit projekt, hvis du rent faktisk ønsker at installere til Apple Store. Okay, lad os se på noget, der er inde i vores kode. Lad os gå gennem filen navigator. Og disse er alle de filer, der allerede fulgte med skabelonen, meget flot. Så når vi på en af ​​dem dette er, hvad det ser ud. Meget lig g redigere. Men du kan se, at syntaksfremhævning er nok en lille smule pænere. Og det er faktisk meget mere magtfulde end g redigering. Og du kan auto komplet en masse ting for dig, som vi vil se meget hurtigt. Lad os åbne debugging område. Okay, som vi kan se, konsollen er lige her. Dette er, hvad du kommer til at se, hvor du er i printf eller nsloging noget. Så uden videre, lad os faktisk kompilere app og se hvad der sker. En væsentlig funktion for s kode, er, at s-kode kommer med en iPhone simulator. Så du behøver ikke at have en iPhone til at prøve dit projekt, s kode kan simulere, at for Dem, som vi kan se lige nu. Det er temmelig nice. Det tager lidt smule tid til at kompilere og dybest set har vi en tom ansøgning som faktisk gør noget. Men det samler. Det er temmelig awesome. Det er meget bedre end C, hva? Okay, så lad os forsøger at tilføje noget. En fil, der er en lille smule underligt her kaldes storyboard. Dette er faktisk en stor, fantastisk funktion til s kode. Fordi i s-kode, kan du faktisk trække og slip elementer på grænsefladen og det vil direkte dukke op. Lad os prøve det. Vi droppe en etiket her, "Hello World !!!" Vi kan centrere det. Pretty cool. Lad os nu køre dette stop simulering. Her har vi "Hello World !!!" Vi ikke selv gøre noget kodning endnu. Hvad dælen sker der? Dette er, hvordan magtfulde Interface Builder kan være. Nogen endda sagt, at kan du sandsynligvis blot fuldføre en app uden skriftlig sandsynligvis tusind linjer kode blot ved hjælp af Interface Builder. Men det er nok ikke den bedste måde at gøre det. Lad os faktisk komme ned til kodning. Så strukturen for filen er faktisk rigtig interessant fordi, som du måske se, er der er ikke hovedfunktion overalt. Se? Som vi nævnte før, du kan se, at dette er en implementering fil for en bestemt klasse. Men der er ingen vigtigste steder. Så hvor er vigtigste? Faktisk er der en vigtigste, men det vigtigste er faktisk skjult for dig. Det vigtigste er her. Det ser bekendt. Så dybest set, hvad iOS gør inde main er, at når vigtigste er kaldes, som er grundlæggende når app er udført, er det skaber en genstand kaldet AppDelegate. Som jeg nævnte før, at hele app er faktisk et objekt af sig selv. Så på denne måde, grundlæggende iOS app fortæller compileren at OK, jeg har tænkt mig at oprette et produkt kaldet AppDelegate, og det vil være min app. Så skal du gå gennem denne AppDelegate og se, hvad den fyr laver. Mit job er gjort for mig. Og i AppDelegate kan du se, at der er nogle virkelig underlige funktioner, godt faktisk metoder, der Apple har allerede givet dig. Hvad er disse? Disse er faktisk blot protokoller at jeg talte om. Så disse er begivenheder, som Apple har givet dig til at starte med. Der er intet i nogle af de funktioner lige nu, men hvis vi ønsker at initialisere noget for vores app før det bliver til visning enhver visning, vi gør det her. Du kan bare læse navnet, og jeg gætte begivenheden er faktisk rigtig klar. Så nu main har skabt et objekt for AppDelegate. Og hvad AppDelegate vil gøre er faktisk også skjult for dig. Den AppDelegate vil begynde indlæsning af viewcontroller lager. Så det er dybest set kommer til at starte laste op alle de synspunkter, som du har og bare gøre visningen baseret på hierarkiet. Så i dette tilfælde har vi kun en opfattelse, som er her. Så det er den eneste visning der kommer til at hedde. Den viewcontroller logik er lige her. Dette er den kode, der faktisk styrer visningen vi lige har set. Okay, lad os gøre noget her. Så viewDidLoad lyder som en begivenhed, når de i virkeligheden er dette også en delegeret, dette er også en protokol. Så uanset udsigten er indlæst, Alt inde i funktionen vil blive kaldt. I dette tilfælde skal vi se "Hello Tianyu! "Hvis vi køre programmet. Det bliver lidt langsom kompilering storyboard filer. Nå ja, ser vi en udgang til det. Det er temmelig cool. Lad os nu rent faktisk gør Mario. Jeg har tænkt mig at definere fungere meget hurtigt. marioWithLevels: (int) niveau resultater. Okay, det er faktisk den awesome funktion af s kode auto afslutning. Så når du skriver om og skriv indtaste, Det har allerede givet op skabelonen for dig, som er temmelig cool. Det burde se rigtig kender jer. Beklager, det er min skyld. Okay, cool. Denne logik skal se rigtig kender til jer, især lige Mario. Men vi vil nu udskrive til konsollen hver eneste gang, fordi vi ønsker at en eller anden måde beholde styr på, hvad vi udskriver. Vi kommer til at bruge resulterer måde senere, for at vise print ud føre til brugeren. Så i stedet er vi bare nslogging alt som vi opbevare alt i en funktion opkald resultat, men logikken er nøjagtig den samme. Når vi er færdig med det, vi bare udskrive vores resultater. Og her i stedet for at udskrive min navn, vi kommer til at kalde en funktion. Lad os se hvad der sker. Ups, naturligvis. Vi har en dejlig lille pyramide herude. Dette er dybest set C, vi er bare manipulere hvor du kalder en funktion og hvordan en funktion se ud. Der er ikke noget anderledes. Men det er faktisk ikke meget spændende her, fordi vi ikke kan se noget fra iPhone app. Så hvis du rent faktisk har en iPhone app-- hvis du rent faktisk har Mario iOS ret nu, du ikke vil at se noget, der har noget at gøre med Mario, fordi alle disse udgange til en konsol er skjult fra en bruger. Det er, hvad du ser, der er "Hello World !!!" Ikke godt. Lad os prøve at gøre brugeren se hvad der præcist er vi udskrive. Så vi behøver ikke at mærke længere. Lad os prøve og finde ud af noget andet, der kunne være nyttige. Der er faktisk en element, der kaldes tekstfelt, som kunne være meget nyttig for os. Det dybest set viser en region af tekst, der kan redigeres. Så det ser virkelig nyttige. Lad os trække den og slippe den. Wow, har vi en tekst visning efter vores opfattelse virkelig dekorativ. Det er en lille smule for stor. Lad os gøre det mindre. Sæt det ind i midten. Gør det mindre så godt. Nu har vi en tekst visning, som vi kunne bruges til at vise vores endelige resultat. Men lige nu er det absolut ikke kommer til at arbejde fordi der er no-- den Viewcontroller vi bare defineret ved ikke, at der er en tekst visning derude. Så vi har brug for en eller anden måde knytte tekstvisning vi bare oprettet med den klasse, er allerede kommet med os. Den måde, vi gør det er faktisk virkelig magiske. Så åbne storyboard. Der er en særlig [uhørligt] kaldet [? assistent?] [uhørligt]. Når du klikker på det, det er vil åbne to filer. Den ene er en klasse og den anden er en tilsvarende visning for det. Det er meget, meget hjælpsomme. Og lad os bare går gennem .h fil. Kontrol, det er [uhørligt] logik. Tryk Kontrol og træk tekstvisning i erklæringen. Vi kommer til at kalde det outputView. Tilslut. Så her har vi erklæret en ny ejendomme til vores viewcontroller klasse. Og den nye egenskab er bare tekstvisning vi har oprettet i grænsefladen bygningen. Så på den måde, vi kunne adgang til alle data og manipulere alt, hvad der er indeni output synspunkt, som er awesome. Så i vores faktiske kode, lad os gøre noget med det. Så denne tid, hvor vi er som print ud det endelige resultat for Mario, vi er i ikke logge noget. Jeg mener, vi kunne holde logningen erklæring. Ud over det, vi Send udlæsningen vi bare skabt til output visning, som er et UI TextView vi lige har oprettet. Lad os nu se hvad der sker. Wow. Vi har en pyramide i app lige nu. Så brugeren kan se vores produktion, fordi Vi har kopieret outputtet fra vores kode vores interface. Det er temmelig godt. Det er faktisk ikke så spændende, fordi vi can-- Alle app gør, er viser en pyramide til dig, og der er intet du kan gøre ved det. Det er ikke særlig spændende. Så lad os nu lave en knap der vil rydde synspunkter. Synes, at en knap vil være nyttig. Træk og slip. One. Knap to. Så når vi klikker på venstre knappen, skal visningen slettes. Der bør være noget på skærmen. Og når vi klikker på højre knap, Mario, visningen vil blive vist igen. Så denne måde, vi gør også magiske ting, kontrol og træk til klassen erklæring i assistent director-- i assistent fremviser. I dette tilfælde har vi specificerer at der bør være en handling. clearMario. Så her har vi allerede skabt en handling kaldet clearMario, som er den metode, der ville blive kaldt når vi trykker på knappen klar. Så i vores faktisk kode, lad os bare sætte output tekst og output visningen i ingenting, og på den måde det vil synes at være klar. Ud over det, så lad os skabe en anden metode kaldet runMario. Åh undskyld, det bør ikke være en ejendom. Okay, der skulle være en handling så godt. Og når denne funktion er kaldt, vi bare køre Mario ti. Forhåbentlig det vil være fint. Er det kompilere? Ja. Nu har vi en visning. Vi har en udgang. Og lad os bare se hvad der sker. Det er gået. Det er tilbage igen. Så her har vi angivet hvilken slags funktion vil blive kaldt, når vi skriver i noget, når vi trykker på en bestemt knap. Dette er dybest set den target handlingsprogram for hændelsesstyrede programmering i mål C. Hertil kommer, at, det er ikke meget spændende fordi vi kan ikke rigtig ændre hvor højt pyramiden vil være, så vi sikkert gerne en eller anden måde få et input fra brugeren og ændre højden af pyramide er baseret på, hvad de output. Så vi kommer til at gøre det. Så denne tid, hvor vi kalder runMario, vi ikke bare kalde Mario direkte. Denne her titel. Delegerede. Dette er meget interessant. Hvad er en delegeret? Jeg har tænkt mig at sætte sig selv her. Og vi kommer til at se hvad det betyder senere. Så her har vi dybest set skabt en specifikke tilfælde kaldes en UI alarm visning. En visning UI alarm er dybest set, hvad du vil se hver gang noget pops op og beder dig om input, Ligesom hvad der vil ske, når du forsøger at købe noget på en app store. Hertil kommer, at, efter at du skabe det, vi viser bare advarslen. Okay, lad os bare hurtigt test vil, at arbejde eller ej. Det er meget cool. Lad os nu faktisk skabe en indtastningsfeltet for UI alarm. Det er sådan, vi gør det. Og vi skal have en input visning for indberetningen. Meget cool. Lad os bare sige 10. Det er ikke at gøre noget rigtigt nu, fordi opkaldet faktisk ændrede ikke til udførelse mario. Så det er blevet lidt smule mærkeligt fordi når vi trykker på en knap nede, når vi trykke på en knap i indberetningen visning, noget skulle ske, men det sker ikke. Hvordan kan vi fange det? Hvordan ved vi, at en bruger har afvist en alarm visning og allerede indtastet et nummer, fordi lige nu intet er faktisk sker. Nå, du måske har gættet det rigtige, delegation. Så ud over alle disse erklæringer, vi nødt til at tilføje en ny delegation til det hedder UI alarm visning delegeret. Så at hver enkelt interaktion eller begivenhed at vi bliver nødt til med visningen UI alarm vil blive håndteret vores klasse samt. Så ud over at være alarm Udsigt Klik på knappen ved indeks. Dette er nået. Så i dette tilfælde har vi already-- så vi har fandt ud af en protokol, vil håndtere begivenheden når vi klikker på knappen Udført på vagt udsigt. Så hver gang vi afvise alarm mening bør dette ske. Lad mig bare teste det meget hurtigt. Nå ja, har vi nået her. Så her, hvad vi ikke vil rent faktisk får, er faktisk få til-- Så vi ønsker at komme ud den tekst, vi har tidligere opføres i indberetningen visning. Og baseret på tekst, vi er vil vise Mario. Dette slår meget hurtigt ud hvis det rent faktisk virker eller ej. Så i dette tilfælde, hvis vi input, lad os sige, 10, vi skulle se 10. Meget godt, vi har et nummer her. Det er temmelig godt. Nu det sidste trin vil være-- Så sidste skridt, vi skal gøre lige nu er bare en ringe Mario med niveau baseret på input at vi har lagt i alarm visning. Så vi er nødt til at konvertere denne streng i iOS. Statisk overløb er meget awesome. Og så har vi bare kalde self marioWithLevels værdi. Lad os se, vil der faktisk arbejde eller ej. Vi er allerede givet en pyramide. Lad os prøve at ændre højden. Der faktisk fungerer. Det er temmelig cool. Så nu kan du bare input enhver værdi, du ønsker. Lad os bare sige fire. Det er temmelig awesome. Så det er dybest set en virkelig hurtig eksempel for, hvordan du opretter et projekt i s-kode og hvordan man virkelig hurtigt wire op nogle virkelig simple arrangementer og funktioner. Så kilden går at blive sat online senere. Så hvis du er interesseret i hvordan iOS Mario fungerer, Jeg har tænkt mig at sætte præcis den samme projekter over på CS50 hjemmeside senere. Vi er dybest set færdig med sommer, og før vi afslutter Jeg vil blot påpege jer til nogle virkelig fantastiske ressourcer, er tilgængelige online. Naturligvis Apple dokumentation vil være meget nyttigt. Men ud over det, jeg især anbefaler fire kilder, kode skole, træ hus, AppCoda og WWDC videoer. Kode skole og træ hus er to online uddannelsesfaciliteter hjemmesider, som specifikt fokuserer på software engineering. Især for kode skole, har virkelig god tutorial på iOS. Det er en virkelig hurtig eksempel for det. De faktisk skabe en virkelig cute-- se på det lille søde iPhone fyr derovre, det er temmelig awesome. Og den måde, de forklarer Mål C syntaks er klart. Tree hus er det samme. Og AppCoda er et forum. Det er faktisk en blog, der blev kørt ved en virkelig oplevet Objective C programmør. Og alle de tutorials i AppCoda er temmelig kort og let at implementere, stærkt anbefales. Og hvis du er en udvikler, helt sikkert gå tjek hvordan WWDC videoer, hvor du kan lære om den nyeste iOS programmering teknikker, API'er og biblioteker. Så det er temmelig meget det til seminaret. Tak så meget. Og jeg håber du har det sjovt oprette din egen iOS app.