ios alkalmazásfejlesztés Koltai Róbert

Hasonló dokumentumok
Objective-C PPKE-ITK

Az iphone fejlesztés alapjai

Az iphone fejlesztés alapjai. I. előadás

ios alkalmazásfejlesztés alapjai Nagy Aszter András BME MIK

ios alkalmazásfejlesztés

Mi az a Memory Management

Adatbázis-kezelés ODBC driverrel

ANGOL NYELVI SZINTFELMÉRŐ 2013 A CSOPORT. on of for from in by with up to at

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

Kölcsönös kizárás, atomicitás, szemafor.

Széchenyi István Egyetem

Using the CW-Net in a user defined IP network

Lopocsi Istvánné MINTA DOLGOZATOK FELTÉTELES MONDATOK. (1 st, 2 nd, 3 rd CONDITIONAL) + ANSWER KEY PRESENT PERFECT + ANSWER KEY

OOP #14 (referencia-elv)

Adatbázisok webalkalmazásokban

Smalltalk 3. Osztályok létrehozása. Készítette: Szabó Éva

OOP: Java 8.Gy: Abstract osztályok, interfészek

Miután létrehoztuk, szeretnénk neki beszédesebb nevet adni. A név változtatásához a következőt kell tenni:

C#, OOP. Osztályok tervezése C#-ban

Osztályok. 4. gyakorlat

(Asking for permission) (-hatok/-hetek?; Szabad ni? Lehet ni?) Az engedélykérés kifejezésére a következő segédigéket használhatjuk: vagy vagy vagy

Programozási nyelvek Java

Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges. Könyvtárhierarhiát fed: Pl.: java/util/scanner.java

Pénzügyi algoritmusok

Java Development Alapképzés

Szálkezelés. Melyik az a hívás, amelynek megtörténtekor már biztosak lehetünk a deadlock kialakulásában?

Programozási nyelvek Java

.Net adatstruktúrák. Készítette: Major Péter

Statistical Dependence

WCF, Entity Framework, ASP.NET, WPF 1. WCF service-t (adatbázissal Entity Framework) 2. ASP.NET kliens 3. WPF kliens

Java Programozás 9. Gy: Java alapok. Adatkezelő 5.rész

CREATE TABLE student ( id int NOT NULL GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name varchar(100) NOT NULL, address varchar(100) NOT NULL )

A riport fordulónapja / Date of report december 31. / 31 December, 2017

Cashback 2015 Deposit Promotion teljes szabályzat

Ethernet/IP címzés - gyakorlat

Szoftvertechnológia alapjai Java előadások

Teszt topológia E1/1 E1/0 SW1 E1/0 E1/0 SW3 SW2. Kuris Ferenc - [HUN] Cisco Blog -

Generikus Típusok, Kollekciók

Concurrency in Swing

ANGOL NYELV KÖZÉPSZINT SZÓBELI VIZSGA I. VIZSGÁZTATÓI PÉLDÁNY

PAST ÉS PAST PERFECT SUBJUNCTIVE (múlt idejű kötőmód)

3. Gyakorlat Ismerkedés a Java nyelvvel

Cloud computing. Cloud computing. Dr. Bakonyi Péter.

1. Template (sablon) 1.1. Függvénysablon Függvénysablon példányosítás Osztálysablon

Lesson 1 On the train

Java Programozás 4. Gy: Java GUI. Tipper, MVC kalkulátor

C# versus Java. Óbudai Egyetem, Java Standard Edition Mérnök Informatikus szak, BSc Labor 3. Bedők Dávid v0.4

Cloud computing Dr. Bakonyi Péter.

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN

Komponensek együttműködése web-alkalmazás környezetben. Jónás Richárd Debreceni Egyetem T-Soft Mérnökiroda KFT

Informatikai Kar. 3. fejezet. alapismeretek. Giachetta Roberto

Segédanyag: Java alkalmazások gyakorlat

3. MINTAFELADATSOR KÖZÉPSZINT. Az írásbeli vizsga időtartama: 30 perc. III. Hallott szöveg értése

Informatika terméktervezőknek

Java-ról Kotlinra. Ekler Péter AutSoft BME AUT. AutSoft

bab.la Cümle Kalıpları: İş Sipariş İngilizce-Macarca

bab.la Cümle Kalıpları: İş Sipariş Macarca-İngilizce

Collections. Összetett adatstruktúrák

Lexington Public Schools 146 Maple Street Lexington, Massachusetts 02420

ANGOL NYELVI SZINTFELMÉRŐ 2011 B CSOPORT. for on off by to at from

C# osztályok. Krizsán Zoltán

There is/are/were/was/will be

(NGB_TA024_1) MÉRÉSI JEGYZŐKÖNYV

OOP: Java 4.Gy: Java osztályok

Java Programozás 1. Gy: Java alapok. Ismétlés ++

Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*;

Stateless Session Bean

C# osztálydeníció. Krizsán Zoltán 1. .net C# technológiák tananyag objektum orientált programozás tananyag

1. Gyakorlat: Telepítés: Windows Server 2008 R2 Enterprise, Core, Windows 7

Programozási nyelvek Java

WebSphere Adapters. 6. változat 2. alváltozat. WebSphere Adapter for SAP Software felhasználói kézikönyv 6. változat 2. kiadás

16F628A megszakítás kezelése

eseményvezérelt megoldások Vizuális programozás 5. előadás

JAVA SE/ME tanfolyam tematika

Informatikai Kar. 4. fejezet. Giachetta Roberto

Csomag. Adatbázis-objektum Programozási eszközök gyűjteménye Két részből áll. specifikáció törzs (opcionális)

Overview. Service. Application Activity Activity 2 Activity 3. Fragment. Fragment. Fragment. Frag ment. Fragment. Broadcast Receiver

Az Open Data jogi háttere. Dr. Telek Eszter

iphone programozás alapjai

FIATAL MŰSZAKIAK TUDOMÁNYOS ÜLÉSSZAKA

Java programozási nyelv 4. rész Osztályok II.

Gelle Kitti Algoritmusok és adatszerkezetek gyakorlat - 07 Hasítótáblák

BME MOGI Gépészeti informatika 4.

Kivételkezelés a C++ nyelvben Bevezetés

International Open TABLE TENNIS. Competition to the Memory of János Molnár RESULTS

ROS Remote Operations Service

Webes alkalmazások fejlesztése

Számítógépes hálózatok

A jövedelem alakulásának vizsgálata az észak-alföldi régióban az évi adatok alapján

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni?

Proxer 7 Manager szoftver felhasználói leírás

Programozási nyelvek Java

Hálózatbiztonság Androidon. Tamas Balogh Tech AutSoft

Objektum Orientált Programozás. 5. JAVA osztályok 21/1B IT MAN

TestLine - OO Programozás alapjai Minta feladatsor

ANGOL NYELVI SZINTFELMÉRŐ 2008 A CSOPORT

Vé V g é r g e r h e a h j a tá t s á i s s z s ál á ak a Runnable, Thread

Symfony kurzus 2014/2015 I. félév. Controller, Routing

ANGOL NYELVI SZINTFELMÉRŐ 2014 A CSOPORT

JNDI - alapok. Java Naming and Directory Interface

Átírás:

ios alkalmazásfejlesztés Koltai Róbert robert.koltai@ponte.hu

Mi az a block? Utasítások sorozata { }-ek között, amit egy objektumként tuduk kezelni. ios 4.0 és Mac OSX 10.6 óta 2

Egy példa a felépítésére [exampledictionary enumeratekeysandobjectsusingblock:^(id key, id value, BOOL *stop) { NSLog(@"%@ : %@", key, value); if ([key isequaltostring:@"stopkey"]) { *stop = YES; } }]; Minden block ^-vel kezdődik Lehet visszatérési értéke Lehetnek bemenő paraméterei (<#type#> <#name#>,..) { utasítások } 3

http://fuckingblocksyntax.com/ 4

Lokális változók is használhatóak a block-on belül int stopvalue = 42; [exampledictionary enumeratekeysandobjectsusingblock:^(id key, id value, BOOL *stop) { NSLog(@"%@ : %@", key, value); if ([key isequaltostring:@ stopkey"] [value intvalue] == stopvalue) { *stop = YES; } }]; DE csak read-only block BOOL stoppedearly = NO; int stopvalue = 42; [exampledictionary enumeratekeysandobjectsusingblock:^(id key, id value, BOOL *stop) { NSLog(@"%@ : %@", key, value); if ([key isequaltostring:@ stopkey"] [value intvalue] == stopvalue) { stoppedearly = YES; //HIBA * s t o p = YES; } }]; 5

Kivéve, ha ellátjuk egy block storage type-al block int stopvalue = 42; [exampledictionary enumeratekeysandobjectsusingblock:^(id key, id value, BOOL *stop) { NSLog(@"%@ : %@", key, value); if ([key isequaltostring:@ stopkey"] [value intvalue] == stopvalue) { stoppedearly = YES; //Ebben az esetben már helyes * s t o p = YES; } }]; Vagy, ha instance variable (_name) De ezek elérésére a setter-eket és a getter-eket használjuk 6

Mi van azokkal a változókkal, amiknek üzenetet küldünk? NSString *stopkey = @"stopkey"; block BOOL stoppedearly = NO; int stopvalue = 42; [exampledictionary enumeratekeysandobjectsusingblock:^(id key, id value, BOOL *stop) { if ([stopkey isequaltostring:key] ([value doublevalue] == stopvalue)) { *stop = YES; stoppedearly = YES; } }]; if (stoppedearly) NSLog(@"I stopped logging dictionary values early ); Ebben az esetben a stopkey a block lefutásáig automatikusan egy strong pointer lesz. Mert a block lefutásáig nem szabadulhet fel. 7

Készítsünk egy olyan változót, amibe majd egy block-ot teszünk Hogy bele tudjunk tenni egy változóba egy block-ot, előbb meg kell határoznunk a változó típusát. Szerkezet typedef <#returntype#>(^<#name#>)(<#arguments#>); Példa typedef double (^squareblock)(double op); 8

Készítsünk egy olyan változót, amibe majd egy block-ot teszünk squareblock square; square = ^(double op) { return op * op; }; NSLog(@"square of five: %f", square(5)); Nem kötelező a typedef, a következő módon is definiálhatunk egy block-ot double (^square)(double op) = ^(double op) { return op * op; }; NSLog(@"square of five: %f", square(5)); 9

Lecture 8 Slides.pdf / 21-28. dia 10

Hol használunk block-okak? Enumeration View animations Sorting Notifications Callbacks(Error handlers, Complition handlers) Multithreading (GCD API) 11

GCD Grand Central Dispatch Dispatch queues are a C-based mechanism for executing custom tasks A dispatch queue executes tasks either serially or concurrently but always in a first-in, first-out order A serial dispatch queue runs only one task at a time, waiting until that task is complete before dequeuing and starting a new one a concurrent dispatch queue starts as many tasks as it can without waiting for already started tasks to finish. 12

GCD Dispatch queues have other benefits: They provide a straightforward and simple programming interface. They offer automatic and holistic thread pool management. They provide the speed of tuned assembly. They are much more memory efficient (because thread stacks do not linger in application memory). They do not trap to the kernel under load. The asynchronous dispatching of tasks to a dispatch queue cannot deadlock the queue. They scale gracefully under contention. Serial dispatch queues offer a more efficient alternative to locks and other synchronization primitives. 13

Operation Queues Egy operation queue a Cococa-s megfelelője a dispatch queue-nak NSOperationQueue osztály Kibővíti a first-in, first-out rendezési elver (függőségek, prioritás, KVO) Egy operation queue-ba NSOperation példányokat tehetünk Az NSOperation egy abstract base class 14

Operations Foundation framework-ben 3 típusú operationt találunk: NSInvocationOperation, NSBlockOperation, NSOperation NSInvocationOperation Akkor hasznájuk, ha nagy számú egyedi operation-t ugyanarra a feladatra használni NSInvocationOperation *theop = [[NSInvocationOperation alloc] initwithtarget:self selector:@selector(mytaskmethod:) object:data]; - (void)mytaskmethod:(id)data { // Perform the task. } 15

Operations Foundation framework-ben 3 típusú operationt találunk: NSInvocationOperation, NSBlockOperation, NSOperation NSBlockOperation Egy objektum orientált wrapper-t nyújt a dispatch queue-ra NSBlockOperation *theop = [NSBlockOperation blockoperationwithblock: ^{ // Do some work. }]; 16

Operations Foundation framework-ben 3 típusú operationt találunk: NSInvocationOperation, NSBlockOperation, NSOperation NSOperation Ha az NSInvocationOperation és a NSBlockOperation nem elégítik ki az igényeket, akkor az NSOperation-ből készítünk subclass-t Minden operation objektumnak meg kell valósítania a következő metódusokat Custom initialization method main 17

Operations @interface MyNonConcurrentOperation : NSOperation @property (strong) id mydata; -(id)initwithdata:(id)data; @end @implementation MyNonConcurrentOperation - (id)initwithdata:(id)data { if (self = [super init]) self.mydata = data; return self; } - (void)main { @try { // Do some work on mydata and report the results. } @catch(...) { // Do not rethrow exceptions. } } @end 18

Nézzük meg a használatukat