$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Objective-C Bootcamp
Search
Kazuki Sakamoto
July 19, 2012
Technology
2
66
Objective-C Bootcamp
Kazuki Sakamoto
July 19, 2012
Tweet
Share
Other Decks in Technology
See All in Technology
「もしもデータ基盤開発で『強くてニューゲーム』ができたなら今の僕はどんなデータ基盤を作っただろう」
aeonpeople
0
150
S3を正しく理解するための内部構造の読解
nrinetcom
PRO
3
230
20251222_next_js_cache__1_.pdf
sutetotanuki
0
110
Connection-based OAuthから学ぶOAuth for AI Agents
flatt_security
0
250
AWSに革命を起こすかもしれない新サービス・アップデートについてのお話
yama3133
0
460
AI時代の新規LLMプロダクト開発: Findy Insightsを3ヶ月で立ち上げた舞台裏と振り返り
dakuon
0
380
AI with TiDD
shiraji
1
140
Amazon Connect アップデート! AIエージェントにMCPツールを設定してみた!
ysuzuki
0
120
高度サイバー人材育成専科資料(前半)
nomizone
0
410
ペアーズにおけるAIエージェント 基盤とText to SQLツールの紹介
hisamouna
2
1.3k
AWSの新機能をフル活用した「re:Inventエージェント」開発秘話
minorun365
2
320
Building Serverless AI Memory with Mastra × AWS
vvatanabe
0
200
Featured
See All Featured
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
510
Digital Ethics as a Driver of Design Innovation
axbom
PRO
0
130
The Spectacular Lies of Maps
axbom
PRO
1
400
jQuery: Nuts, Bolts and Bling
dougneiner
65
8.3k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.3k
For a Future-Friendly Web
brad_frost
180
10k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
140
Java REST API Framework Comparison - PWX 2021
mraible
34
9k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
87
Documentation Writing (for coders)
carmenintech
77
5.2k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
2
2.7k
Optimizing for Happiness
mojombo
379
70k
Transcript
Objective-C Bootcamp
“Objective-C!” “Objective-C!”
จ๏ (Syntax)
จ๏ (Syntax) •Cݴޠͱಉ͡
จ๏ (Syntax) •Cݴޠͱಉ͡
จ๏ (Syntax) •C / C++ ͱಉډՄೳ
จ๏ (Syntax) •C / C++ ͱಉډՄೳ •Ϋϥε •ϝιουݺͼग़͠
Ϋϥε
Ϋϥε class Foo { int bar; int add(int n) {
bar += n; return bar; } };
Ϋϥε C/C++ͱಉډՄೳ = C++ͱҟͳΔ
Ϋϥε @interface Foo @end
Ϋϥε @interface Foo { int bar; } @end
Ϋϥε @interface Foo { int bar; } - (int)add:(int)n; @end
Ϋϥε @interface Foo { int bar; } - (int)add:(int)n; +
(id)fooWithValue:(int)value; @end
Ϋϥε @implementation Foo @end
Ϋϥε @implementation Foo - (int)add:(int)n { bar += n; return
bar; } @end
ϝιουݺͼग़͠ $foo->add(5);
ϝιουݺͼग़͠ foo.add(5);
ϝιουݺͼग़͠ C/C++ͱಉډՄೳ = CͱҟͳΔ
ϝιουݺͼग़͠ [foo add:5];
ϝιουݺͼग़͠ [[[Foo alloc] init] add:5];
ϝιουݺͼग़͠ $foo = null; $foo->bar();
ϝιουݺͼग़͠ $foo = null; $foo->bar();
ϝιουݺͼग़͠ id foo = nil; [foo bar];
ϝιουݺͼग़͠ id foo = nil; [foo bar]; ʘ ฏؾ ʗ
ϝιουݺͼग़͠ [foo bar];
ϝιουݺͼग़͠ [foo bar]; objc_msgSend(foo, @selector(bar));
ϝιουݺͼग़͠ objc_msgSend Objective-C Message Send ϝοηʔδૹ৴
ϝοηʔδૹ৴ ϝιουݺͼग़͠ •ͲͷΦϒδΣΫτʹ •ͲΜͳϝοηʔδΛૹ͍͍ͬͯ
[duck quack]; [dog quack]; [cat performSelector: NSSelectorFromString(@”quack”)];
ϝοηʔδૹ৴ ϝιουݺͼग़͠ •ͲͷΦϒδΣΫτʹ •ͲΜͳϝοηʔδΛૹ͍͍ͬͯ ɹɹɹɹ Late binding
ϝοηʔδૹ৴ ϝιουݺͼग़͠ Duck Typing (Late binding) ΞώϧͷΑ͏ʹ໐͘ͷͳΒɺ ͦΕΞώϧͰ͋Δ
ϝοηʔδૹ৴ ϝιουݺͼग़͠ Duck Typing (Late binding) ΞώϧͷΑ͏ʹ໐͘ͷͳΒɺ ͦΕΞώϧͰ͋Δ
Objective-C • Early binding • Cؔݺग़ / C++ϝιουݺग़ • Late
binding • Objective-C ϝοηʔδૹ৴
Objective-C • Early binding • Cؔݺग़ / C++ϝιουݺग़ • ߴ
• Late binding • Objective-C ϝοηʔδૹ৴ •
Ϧςϥϧ
Ϧςϥϧ จࣈྻ @”Hello World”
Ϧςϥϧ ”Hello World” จࣈྻ @”Hello World” C / C++ ͱಉډՄೳ
Ϧςϥϧ จࣈྻ @”Hello World” [NSString stringWithUTF8String:”Hello World”]
Ϧςϥϧ @15
Ϧςϥϧ @15 [NSNumber numberWithInt:15]
Ϧςϥϧ ྻ @[a, b, c]
Ϧςϥϧ ྻ @[a, b, c] [NSArray arrayWithObjects:a, b, c, nil]
Ϧςϥϧ σΟΫγϣφϦ @{k1:v1, k2:v2, k3:v3}
Ϧςϥϧ σΟΫγϣφϦ @{k1:v1, k2:v2, k3:v3} NSDictionary
ϝϞϦཧ
ϝϞϦཧ ΦϒδΣΫτͷੜํ๏
ϝϞϦཧ NSString *string = [NSString stringWithFormat:@”Hello %d”, i];
ϝϞϦཧ NSObject *obj = [[NSObject alloc] init];
ϝϞϦཧ id obj = [[NSObject alloc] init];
ϝϞϦཧ ΦϒδΣΫτͷഁغํ๏
ϝϞϦཧ ͳ͠!
ϝϞϦཧ NSObject *obj = [[NSObject alloc] init]; obj = nil;
ϝϞϦཧ • ࢀরΧϯτํࣜ
None
None
None
None
None
None
None
None
None
ϝϞϦཧ • ࢀরΧϯτํࣜ • ੲखಈͰͬͯͨ NSObject *obj = [[NSObject alloc]
init]; [obj release];
ϝϞϦཧ • ࢀরΧϯτํࣜ • ੲखಈͰͬͯͨ • ࠓίϯύΠϥ͕ͬͯ͘ΕΔ! NSObject *obj =
[[NSObject alloc] init]; [obj release];
ϝϞϦཧ • ࢀরΧϯτํࣜ • ίϯύΠϥ͕ͬͯ͘ΕΔ • Automatic Reference Counting •
ུͯ͠ARC
ϝϞϦཧ GCͱҧ͏ͷ?
ϝϞϦཧ • GC • ͍Ζ͍Ζํࣜ͋Δ͕ɺ جຊతʹϥϯλΠϜίετ͕͔͔Δ • ࢀরΧϯτํࣜ • جຊతʹϥϯλΠϜίετ͔͔Βͳ͍
• ॥ࢀর
None
॥ࢀরճආํ๏
॥ࢀরճආํ๏ __weak
__weak id __weak obj = [[NSObject alloc] init];
__weak id __weak obj = [[NSObject alloc] init]; NSLog(@”obj =
%@”, obj);
__weak id __weak obj = [[NSObject alloc] init]; NSLog(@”obj =
%@”, obj); ݁Ռ: (null)
None
εϨου
εϨου Grand Central Dispatch Blocks
εϨου dispatch_queue_t q = dispatch_get_global_queue(0, 0); dispatch_async(q, ^{ ʘ εϨου
ʗ });
εϨου dispatch_queue_t q = dispatch_get_global_queue(0, 0); dispatch_async(q, ^{ ʘ εϨου
ʗ });
εϨου dispatch_queue_t q = dispatch_get_global_queue(0, 0); dispatch_async(q, ^{ ʘ εϨου
ʗ });
εϨου dispatch_async(q, ^{ εϨου্Ͱ࡞ۀ dispatch_async(dispatch_get_main_queue(),^{ ʘϝΠϯεϨουʗ }); });
εϨου • Grand Central Dispatch (GCD) • OS X kernelͷGCD༻εϨουΛ͏ͷ
Ͱܰྔ • API͕؆୯ • LinuxͰ͑ΔΑ!
εϨου • Blocks • lambda, closure • CoffeeScriptͳΒ ->, =>
• C#ͳΒ ()=> • PHP5.3Ҏ߱ function(){} • LinuxͰ͑ΔΑ!
None
“AndroidͰObjective-CͳΜ͡Όʔ!” “Objective-CͳΜ͡Όʔ!” ͓ΘΓ
ຊ