Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
My Way to Objective-C
Search
高見龍
November 22, 2012
Programming
6
670
My Way to Objective-C
高見龍
November 22, 2012
Tweet
Share
More Decks by 高見龍
See All by 高見龍
宅宅自以為的浪漫:跟 AI 一起為自己辦的研討會寫一個售票系統
eddie
0
500
自己的售票系統自己做!
eddie
0
520
AI Agent 時代的開發者生存指南
eddie
4
2.5k
print("Hello, World")
eddie
2
600
為你自己學 Python - 冷知識篇
eddie
1
410
為你自己學 Python
eddie
0
710
Generative AI 年會小聚 - AI 教我寫程式
eddie
0
170
讓數據說話:用 Python、Prometheus 和 Grafana 講故事
eddie
0
700
AI 時代的程式語言學習法
eddie
0
210
Other Decks in Programming
See All in Programming
新卒エンジニアのプルリクエスト with AI駆動
fukunaga2025
0
220
関数実行の裏側では何が起きているのか?
minop1205
1
700
バックエンドエンジニアによる Amebaブログ K8s 基盤への CronJobの導入・運用経験
sunabig
0
160
251126 TestState APIってなんだっけ?Step Functionsテストどう変わる?
east_takumi
0
320
Full-Cycle Reactivity in Angular: SignalStore mit Signal Forms und Resources
manfredsteyer
PRO
0
140
S3 VectorsとStrands Agentsを利用したAgentic RAGシステムの構築
tosuri13
6
310
Context is King? 〜Verifiability時代とコンテキスト設計 / Beyond "Context is King"
rkaga
9
1.2k
AIコーディングエージェント(Manus)
kondai24
0
180
20251127_ぼっちのための懇親会対策会議
kokamoto01_metaps
2
430
AWS CDKの推しポイントN選
akihisaikeda
1
240
AIの誤りが許されない業務システムにおいて“信頼されるAI” を目指す / building-trusted-ai-systems
yuya4
6
3.5k
モデル駆動設計をやってみようワークショップ開催報告(Modeling Forum2025) / model driven design workshop report
haru860
0
270
Featured
See All Featured
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.2k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
The Language of Interfaces
destraynor
162
25k
Reflections from 52 weeks, 52 projects
jeffersonlam
355
21k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
196
70k
Balancing Empowerment & Direction
lara
5
800
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
9.8k
How GitHub (no longer) Works
holman
316
140k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
How to Ace a Technical Interview
jacobian
280
24k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
24k
Writing Fast Ruby
sferik
630
62k
Transcript
My Way to Obj-C
None
programming
exp ≈ 15 years
but not solid at all ..orz
Flash/ActionScript
exp ≈ 7 years
Ruby
exp ≈ 3.5 years
Obj-C
exp ≈ 2 years
real exp ≈ 0.5 years
I learn a lot from those languages.
Obj-C
Obj-C is a dynamic language.
OO from smalltalk
send message
# Ruby class Animal def say_something(words) puts words end end
cat = Animal.new cat.say_something "hello, world"
// Obj-C [cat saySomething: @"Hello, World"];
# Ruby cat.send :say_something, "Hello, World"
but what if the cat doesn't know how to talk?
nil is fine with all messages which it doesn't know
:)
protocol
@protocol Talking - (void)saySomething:(NSString *)word; @end
// Animal.h @interface Animal<Talking> @end
// Animal.m @implement Animal - (void)saySomething:(NSString *)word { // say
something here.. :) } @end
category
monkey patching
# Ruby class String def say_hi puts "hi, there" end
end "eddie".say_hi # hi, there
// NSString+MyHelloString.h #import <Foundation/Foundation.h> @interface NSString (MyHelloString) - (void) say_hi;
@end
// NSString+MyHelloString.m #import "NSString+MyHelloString.h" @implementation NSString (MyHelloString) -(void) say_hi{ NSLog(@"hi,
there"); } @end
// Cat.h #import "NSString+MyHelloString.h"
// Cat.m [@"eddie" say_hi];
id
dynamic typing
// Cat.h @interface Cat - (IBAction)clickButton:(id)sender; @end
- (id)init { self = [super init]; if (self) {
// do some init things here } return self; }
block
^
# Ruby 10.times { |i| puts i }
# obj-c [kids enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
// do something }];
GCD
# obj-c dispatch_queue_t queue = dispatch_queue_create("imageLoadingQueue", NULL); dispatch_async(queue, ^{ //
start to load image here dispatch_async(dispatch_get_main_queue(), ^{ // image loaded, do something here }); });
coding exp from Flash/ ActionScript and Ruby
Obj-C and Ruby have the same parent
smalltalk
I learn dynamic programming from Ruby
I learn block from Ruby
Obj-C is not difficult to learn.
Cocoa Framework is.
I learn UI inheritance from Flash/ActionScript
https://developer.apple.com/Library/ios/#docum Cocoa/Conceptual/CocoaFundamental CocoaDesignPatterns/CocoaDesignPattern
https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CocoaFundamentals/WhatIsCocoa/WhatIsCocoa.html
Essential ActionScript 3.0 p.459
event handling
async handling
cocos2d
But..
delegation
Obj-C is subset of C
memory management
retain v.s release
-(NSString *) getBookName { NSString *the_name = @"This is a
book"; return the_name; }
-(NSString *) getBookName { NSString *the_name = @"This is a
book"; [the_name release]; return the_name; }
autorelease http://blog.eddie.com.tw/2010/11/25/autorelease-in-objective-c/
-(NSString *) getBookName { NSString *the_name = @"This is a
book"; return [the_name autorelease]; }
None
ARC Automatic Reference Counting
ARC knows more Obj-C than you :)
new style Obj-C syntax
literal syntax sugar
NSNumber* age = [NSNumber numberWithInt:18];
NSNumber* age = @18;
NSNumber* pi = [NSNumber numberWithFloat:3.1415926F];
NSNumber* pi = @3.1415926F;
NSArray* kids = [NSArray arrayWithObjects:@"高思", @"高齊", nil];
NSArray* kids = @[@"高思", @"高齊"];
NSDictionary* kidsEnglishName = [NSDictionary dictionaryWithObjectsAndKeys: @"Kose", @"高思", @"Coach", @"高齊", nil];
NSDictionary* kidsEnglishName = @{@"高思":@"Kose", @"高齊":@"Coach"};
// for-loop style NSArray* kids = ... for (int i
= 0; i < kids.count; ++i) { NSString* kid = [kids objectAtIndex:i]; // do something }
// for-in style NSArray* kids = ... for (NSString* kid
in kids) { // do something }
// block style NSArray* kids = ... [kids enumerateObjectsUsingBlock:^(NSString* kid,
NSUInteger idx, BOOL *stop) { // do something here }];
NSDictionary * kidsEnglishName = ... NSArray* keys = [dict allKeys];
for (NSString* key in keys) { NSString* value = [dict objectForKey:key]; // do something else }
// block style NSDictionary * kidsEnglishName = ... [kids enumerateKeysAndObjectsUsingBlock:^(id
key, id obj, BOOL *stop) { // do something here }];
Subscripting Methods
NSArray* kids = @[@"高思", @"高齊"]; NSLog(@"%@", [kids objectAtIndex:0]); // 高思
NSArray* kids = @[@"高思", @"高齊"]; NSLog(@"%@", kids[0]); // 高思
NSMutableArray* kids = [@[@"高思", @"高齊"] mutableCopy]; kids[0] = @"狸貓"; NSLog(@"%@",
[kids objectAtIndex:0]); // 狸貓
NSMutableDictionary* kidsEnglishName = [@{@"高思":@"Kose", @"高齊":@"Coach"} mutableCopy]; kidsEnglishName[@"高思"] = @"Gauss";
@synthesize
// hello.h @property (nonatomic, strong) NSString* name; // hello.m @synthesize
name = _name;
// hello.h @property (nonatomic, strong) NSString* name; // hello.m @synthesize
name = _name;
None
Conclusion
there's no BEST or WORST language
non of them are useless
code more, complain less
完 thank you all :)
高見見龍龍 Conacts photo by Eddie Websie Blog Plurk Facebook Google
Plus Twiter Email Mobile http://www.eddie.com.tw http://blog.eddie.com.tw http://www.plurk.com/aquarianboy http://www.facebook.com/eddiekao http://www.eddie.com.tw/+ https://twiter.com/#!/eddiekao
[email protected]
+886-928-617-687