Iphone Programlama Eğitimi<br />21. 04. 2011<br />Cocoa & Objective-C<br />
C, C++, Java dilleri  gibi nesneye dayalı bir dil olan Objective  C ‘nin kendine özgü objeleri, tanımları,değişkenleri, cl...
//Interface (Simple.h dosyası)<br />#import ; <br />@interface Simple : NSObject { <br />} <br />@end<br />//Implementatio...
Diğer dillerden bilinen basit tipleri kullanır.<br />BOOL : YES,NO<br />int   	: tam sayı<br />float	: ondalık sayı<br />c...
İlk öğrenenler için en zoru syntax : yazım biçimi dir<br />Objective C isimlendirilmiş parametre ile çalışır.<br />Java da...
[self toplaIlksayi:5 ikincisayi:4]; methodunda<br />[ : ilk method çağırma biçimi<br />self : o methodu çağıran object<br ...
NSStrings:<br />NSString *test = @"Bu bir test kelimesidir."<br />PlaceHolders:<br />%d, %D, %i  : İşaretli 32 Bit Tamsayı...
Objective C ile birçok parametreden oluşmuş nesneler oluşturabiliriz<br />Java veya C# da <br />BenimObjem obj = new Benim...
İç içe Method çağırma :<br />NSLog( @"Cümlemiz %@", [[NSString alloc] stringWithFormat:@"%d. sayi",10]");<br />Tek satırda...
Class, metod ve Attributelar<br />Class : ilk üretilirken alloc kullanılması gerekir<br />Bu sayede ust classtan özelleşti...
- (void) sayHello: (NSString*) name { <br />NSMutableString *message = [[NSMutableString alloc] initWithString: @"Hello th...
Alloc : Bellekte yer ayırmak için kullanılır.<br />init : Class alloc edildikten sonra ilk nasıl davranacak onu belirtir.<...
Release:<br />SDK da Garbage Collector yok. Bu yüzden<br />Sinifim *yeniAdi = [[Sinifim alloc] init]; tanımlaması yaptığım...
Retain:<br />Simple *objSimple = [[Simple alloc] init]; <br />Simple *objSimpleTwo = objSimple; <br />[objSimple release];...
Release etmeden önce ;</li></ul>[objSimpleTwo retain]; kullanmamız gerekir.<br />Release ve Retain<br />
<ul><li>(void) sayHello { </li></ul>Simple *objSimple = [[[Simple alloc] init] autorelease]; <br />[objSimple sayHello:@"M...
@private<br /> Sadece tanımlandığı classtan erişilebilir<br />@protected<br />Sadece tanımlandığı ve türetilen classlar er...
Scope<br />
@try{<br />}<br />@catch (NSException ex){<br />	NSLog([ex name]);<br />	NSLog ([ex reason]);<br />}<br />@finally{<br />}...
NSException*exception = [NSExceptionexceptionWithName:@"HotTeaException"reason:@"The tea is too hot" userInfo:nil];<br />@...
.h  dosyası<br />#import "Superclass.h"<br />@interface ClassName: superclass<br />{<br />	//değişken tanımlama<br />}<br ...
<ul><li>Örn. UIView classından bir subclass türettiğimizde ihtiyaçlarımızı karşılayan bir class elde etmiş olacağız. Web B...
Superclass ın class methodlarının başına + yazılır. (+alloc)
Subclass ın instance methodlarının başına – yazılır
–(void)display;</li></ul>Super/Sub Class<br />
Herhangi bir classtan implemente edilebilen methodların tanımlandığı bir interface.<br />Ayrı bir class değildir.<br />Örn...
Kullanımı:<br />#import "B.h"<br />@protocol A<br />-test:(id <B>)anObject;<br />@end<br />interface MyClass : NSObject <U...
@interface myClass: NSObject {<br />	NSString *myString;<br />}<br />@property(nonatomic,retain) NSString *myString<br />@...
setmyString:</li></ul>@property, @synthesize<br />
‘Tanımlanmış özellikler’ herhangi bir objenin get-set metotlarını tanımlamak ve gerçekleştirmek için kullanılır.<br />Örn....
Nonatomic: Lock – unlock mantığını devre dışı bırakır. Aynı değişkene farklı kanallardan(thread) erişmek istemiyorsanız bu...
copy, gönderilen değişkenin bir kopyasını alır ve kendi değişkenimize koyar. NSString icin uygundur.<br />retain, kendi de...
readonly @synthesize komutu ile yalnızca bir "get" metodu yaratılacağını, "set" metodu yaratılmayacağını söyler.<br />read...
Objective C ve Cocoa için 2 tür array var.<br />NSArray: İçerik ilk yüklendikten sonra boyutu değiştirilemez<br />NSMutabl...
Upcoming SlideShare
Loading in …5
×

Ders 3

1,514 views

Published on

0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,514
On SlideShare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
0
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Ders 3

  1. 1. Iphone Programlama Eğitimi<br />21. 04. 2011<br />Cocoa & Objective-C<br />
  2. 2. C, C++, Java dilleri gibi nesneye dayalı bir dil olan Objective C ‘nin kendine özgü objeleri, tanımları,değişkenleri, classları ve metotları vardır.<br />Cocoa : Objective C ‘nin avantajlarını kullanan, Apple ‘ın OSX ve iOS için sağladığı tüm frameworklerin genel adıdır.<br />Objective - C<br />
  3. 3. //Interface (Simple.h dosyası)<br />#import ; <br />@interface Simple : NSObject { <br />} <br />@end<br />//Implementation (Simple.m doyası)<br />#import "Simple.h" <br />@implementation Simple <br />@end<br />Interface & Implementation<br />
  4. 4. Diğer dillerden bilinen basit tipleri kullanır.<br />BOOL : YES,NO<br />int : tam sayı<br />float : ondalık sayı<br />char : karakter<br />Basit Tipler<br />
  5. 5. İlk öğrenenler için en zoru syntax : yazım biçimi dir<br />Objective C isimlendirilmiş parametre ile çalışır.<br />Java da method <br />Topla(4,5); şeklinde olurken<br />Objective C de<br />[self Toplailksayi:5 ikincisayi:4]; olur<br />Objective C Objeleri<br />
  6. 6. [self toplaIlksayi:5 ikincisayi:4]; methodunda<br />[ : ilk method çağırma biçimi<br />self : o methodu çağıran object<br />toplaIlksayi : Method isminin başlangıcı<br />5: İlk parametre<br />İkincisayi: ikinci parametre ismi<br />4: ikinci parametre<br />Objective C Objeleri<br />
  7. 7. NSStrings:<br />NSString *test = @"Bu bir test kelimesidir."<br />PlaceHolders:<br />%d, %D, %i : İşaretli 32 Bit Tamsayı<br />%@ : Karakterler<br />%f : Double ve Float sayılar (Ondalık)<br />%c : Tek Karakter<br />[NSString stringWithFormat:@"Toplam Sonucu:%d",10];<br />Objective C Objeleri<br />
  8. 8. Objective C ile birçok parametreden oluşmuş nesneler oluşturabiliriz<br />Java veya C# da <br />BenimObjem obj = new BenimObjem(); gibiyken<br />Objective C’de<br />NSURL *myUrl = [[NSURL alloc] initWithString:@"http://www.test.com"]<br />NSURL : Objenin tipi<br />myURL : dönen sonuç değişkeni<br />[[ : iç içe iki method çağırır.<br />NSURL :class ismi<br />alloc : obje için hafıza da yer ayırır<br />initWithString: ikinci method<br />http://www.test.com: parametre <br />Nesne oluşturma<br />
  9. 9. İç içe Method çağırma :<br />NSLog( @"Cümlemiz %@", [[NSString alloc] stringWithFormat:@"%d. sayi",10]");<br />Tek satırda iki ya da daha fazla method çağırabiliriz. Bu şekilde Fonksiyon yazma ve çağırma kolaylaştırılmıştır.<br />Nesne oluşturma<br />
  10. 10. Class, metod ve Attributelar<br />Class : ilk üretilirken alloc kullanılması gerekir<br />Bu sayede ust classtan özelleştirilmiş bir class türetilir.<br />NSLog ile yazdığımızda <myClass: 0xe3dd3> şeklinde bellekten yer ayırdığını görebiliriz. (Örnek)<br />#import "Rectange.h" şeklinde projeye eklenir.<br />#includedan farkı daha önce eklenmişse tekrar eklemez.<br />
  11. 11. - (void) sayHello: (NSString*) name { <br />NSMutableString *message = [[NSMutableString alloc] initWithString: @"Hello there "]; <br />[message appendString:name];<br />NSLog(message); <br />[message release]; <br />}<br />Method tanımlama<br />
  12. 12. Alloc : Bellekte yer ayırmak için kullanılır.<br />init : Class alloc edildikten sonra ilk nasıl davranacak onu belirtir.<br /><ul><li>(id) init { </li></ul>if (self = [super init])<br />{ <br />magicNumber= 5;<br />} <br />return self; <br />}<br />Burada üst class olan NSObjectin init methodunu öncelikle çağırıyoruz.<br />Alloc ve init Methodları<br />
  13. 13. Release:<br />SDK da Garbage Collector yok. Bu yüzden<br />Sinifim *yeniAdi = [[Sinifim alloc] init]; tanımlaması yaptığımızda bunu bellekten silmemiz gerekir.<br />[yeniAdi release]; şeklinde sileriz.<br />Bu şekilde nesnenin referans sayi değeri 0 olur ve dealloc fonksiyonu çalıştığında bellekten silinmiş olur.<br />Release ve Retain<br />
  14. 14. Retain:<br />Simple *objSimple = [[Simple alloc] init]; <br />Simple *objSimpleTwo = objSimple; <br />[objSimple release]; // alt satırdaki kod hata verecektir.<br />[objSimpleTwo sayHello:@"Deneme"];<br /><ul><li>Aynı pointerı kullanıyorlar.
  15. 15. Release etmeden önce ;</li></ul>[objSimpleTwo retain]; kullanmamız gerekir.<br />Release ve Retain<br />
  16. 16. <ul><li>(void) sayHello { </li></ul>Simple *objSimple = [[[Simple alloc] init] autorelease]; <br />[objSimple sayHello:@"Merhaba"]; <br />}<br />Nesne ilk oluşurken otomatik olarak autorelease havuzuna da işaret edilir.<br />Metodun çalışması bittiği anda (sayHello) autorelease havuzu tetiklenir ve işi biten nesneler bellekten temizlenir.<br />AutoRelease<br />
  17. 17. @private<br /> Sadece tanımlandığı classtan erişilebilir<br />@protected<br />Sadece tanımlandığı ve türetilen classlar erişebilir.<br />@public<br />Her yerden erişebilir.<br />@package<br />İçerde public olarak çalışır, dışarıya karşı private olarak çalışır.<br />Scope<br />
  18. 18. Scope<br />
  19. 19. @try{<br />}<br />@catch (NSException ex){<br /> NSLog([ex name]);<br /> NSLog ([ex reason]);<br />}<br />@finally{<br />}<br />Try & Catch & Finally<br />
  20. 20. NSException*exception = [NSExceptionexceptionWithName:@"HotTeaException"reason:@"The tea is too hot" userInfo:nil];<br />@throw exception;<br />throw<br />
  21. 21. .h dosyası<br />#import "Superclass.h"<br />@interface ClassName: superclass<br />{<br /> //değişken tanımlama<br />}<br />//metod tanımlama<br />@end<br />Super/Sub Class<br />.m dosyası<br />#import "className.m"<br />@implementation className<br />//metod tanımlama<br />@end<br />
  22. 22. <ul><li>Örn. UIView classından bir subclass türettiğimizde ihtiyaçlarımızı karşılayan bir class elde etmiş olacağız. Web Browser, ImageView
  23. 23. Superclass ın class methodlarının başına + yazılır. (+alloc)
  24. 24. Subclass ın instance methodlarının başına – yazılır
  25. 25. –(void)display;</li></ul>Super/Sub Class<br />
  26. 26. Herhangi bir classtan implemente edilebilen methodların tanımlandığı bir interface.<br />Ayrı bir class değildir.<br />Örn. Mouse actionları ayrı bir protocol olarak belirlenmiş classlarla yakalanabilir.<br />Delegate objeleri ile birlikte kullanılır.<br />@protocol<br />
  27. 27. Kullanımı:<br />#import "B.h"<br />@protocol A<br />-test:(id <B>)anObject;<br />@end<br />interface MyClass : NSObject <UIApplicationDelegate, AnotherProtocol> {<br />}<br />@end<br />@protocol<br />
  28. 28. @interface myClass: NSObject {<br /> NSString *myString;<br />}<br />@property(nonatomic,retain) NSString *myString<br />@synthesize myString;<br />Class ı mıza myString gibi bir attribute eklediğimizde @synthesize ile bu attribute için get ve set methodları oluşur. <br /><ul><li>getmyString:
  29. 29. setmyString:</li></ul>@property, @synthesize<br />
  30. 30. ‘Tanımlanmış özellikler’ herhangi bir objenin get-set metotlarını tanımlamak ve gerçekleştirmek için kullanılır.<br />Örn. Thread –safe tanımlama ya da değerin set edildiğinde kopyalanması gibi .<br />Property tanımlamada ek methodların nasıl davranacağı konusunu belirtir.<br />Compiler kendisi değişkenleri synthesize eder, ek kod ya da bakım istemez.<br />Bunlar scope içindedir o yüzden compiler direkt ulaşılabilir.<br />Declared Properties<br />
  31. 31. Nonatomic: Lock – unlock mantığını devre dışı bırakır. Aynı değişkene farklı kanallardan(thread) erişmek istemiyorsanız bunu kullanırsınız.<br />assign, copy, retain "set" metodlarında girdi olarak verilen değişkenin kendi değişkenimize nasıl atanacağını belirler.<br />assign, doğrudan bir atama yapar. Genellikle int, float gibi "primitive" türler için uygundur. Bir nesne için doğrudan atama genellikle kullanılmaz.<br />Declared Properties<br />
  32. 32. copy, gönderilen değişkenin bir kopyasını alır ve kendi değişkenimize koyar. NSString icin uygundur.<br />retain, kendi değişkenimizdeki nesneyi serbest bırakıp gönderilen değişkeni kendi değişkenimizde güvenli bir şekilde saklar. Böylece o nesne siz ihtiyaç duydugunuz sürece silinmeyecektir.<br />Declared Properties<br />
  33. 33. readonly @synthesize komutu ile yalnızca bir "get" metodu yaratılacağını, "set" metodu yaratılmayacağını söyler.<br />readwrite'ta ise hem "get" hem de "set" metodları yaratılır.<br />Declared Properties<br />
  34. 34. Objective C ve Cocoa için 2 tür array var.<br />NSArray: İçerik ilk yüklendikten sonra boyutu değiştirilemez<br />NSMutableArray: Ekleme çıkarma yapılabilir.<br />Arraylerde datalar sıralı bir şekilde tutulur.<br />Herhangi bir objeyi arraylere ekleyebiliriz. String, viewcontroller..<br />Arrayler<br />
  35. 35. Herhangi bir indexteki dataya direkt ulaşabiliriz. <br />[myArray objectAtIndex:0];<br />Döngü içinden erişim: (Objective C-de foreach)<br />for(myClass *myObject in myArray)<br />{<br /> NSLog (@»%@»,myObject.name);<br />}<br />Arrayler<br />
  36. 36. Javadaki Hashmap<br />NSMutableDictionary *dict = [[NSMutableDictionary alloc] init]; <br />[dict setObject:@"John" forKey:@"Firstname"]; <br />[dict setObject:@"Doe" forKey:@"Lastname"]; <br />[dict setObject:@"info at objectgraph.com" forKey:@"Email"];   <br />NSLog(@"%@", dict);   <br />Dictionary<br />
  37. 37. NSArray *keys = [dict allKeys];  <br />// values in foreach loop<br />for (NSString *key in keys) { <br />NSLog(@"%@ is %@",key, [dict objectForKey:key]); <br />}<br />Dictionary<br />
  38. 38. //Forloop<br />     for (int y = 0; y < 3; y++) {<br />     NSLog(@"y = %i", y);<br />}<br />for (NSString *s in anArray) {<br />    NSLog(s);<br />}<br />for<br />
  39. 39. /Do loop<br />x = 0;<br />do{<br />     NSLog(@"x = %i", x);<br />     x++;<br />}<br />while(x <= 4);<br />//While loop<br />x = 0;<br />while (x <= 4 ) {<br />     NSLog(@"x = %i", x);<br />     x++;<br />}<br />Do-while<br />

×