Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
My Way to Objective-C
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
高見龍
November 22, 2012
Programming
690
6
Share
My Way to Objective-C
高見龍
November 22, 2012
More Decks by 高見龍
See All by 高見龍
宅宅自以為的浪漫:跟 AI 一起為自己辦的研討會寫一個售票系統
eddie
0
580
自己的售票系統自己做!
eddie
0
610
AI Agent 時代的開發者生存指南
eddie
4
2.7k
print("Hello, World")
eddie
2
640
為你自己學 Python - 冷知識篇
eddie
1
450
為你自己學 Python
eddie
0
760
Generative AI 年會小聚 - AI 教我寫程式
eddie
0
210
讓數據說話:用 Python、Prometheus 和 Grafana 講故事
eddie
0
760
AI 時代的程式語言學習法
eddie
0
260
Other Decks in Programming
See All in Programming
Zod v4 Codec でスキーマに型変換を埋め込む REST API 設計 #TSKaigi2026
ryutaro_yako
0
170
AI駆動開発勉強会 広島支部 第一回勉強会 AI駆動開発概要とワークショップ
hayatoshimiu
0
410
3Dシーンの圧縮
fadis
1
470
GitHub Copilot CLIのいいところ
htkym
2
1.2k
要はバランスからの卒業 #yumemi_grow
kajitack
0
200
Talking to terminals (and how they talk back) (KotlinConf 2026)
jakewharton
PRO
1
160
タクシーアプリ『GO』の バックエンド開発のおける AI利活用と若者のすべて
pyama86
3
1.8k
Migrations : C'est une question d'hygiène !
vinceamstoutz
0
2.5k
脅威をエンジニアリングの糧にして――現場編 / Turning Threats into Engineering Fuel — Field Edition
nrslib
0
220
AIとRubyの静的型付け
ukin0k0
0
450
JavaDoc 再入門
nagise
0
210
ビジネスモデルから紐解く、AI+型駆動開発
hirokiomote
2
4.1k
Featured
See All Featured
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
1.1k
So, you think you're a good person
axbom
PRO
2
2k
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
120
How STYLIGHT went responsive
nonsquared
100
6.1k
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
How to train your dragon (web standard)
notwaldorf
97
6.6k
Ruling the World: When Life Gets Gamed
codingconduct
0
240
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.5k
Everyday Curiosity
cassininazir
0
210
Paper Plane
katiecoart
PRO
1
50k
What does AI have to do with Human Rights?
axbom
PRO
1
2.2k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.1k
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