Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
My Way to Objective-C
Search
高見龍
November 22, 2012
Programming
720
6
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
My Way to Objective-C
高見龍
November 22, 2012
More Decks by 高見龍
See All by 高見龍
宅宅自以為的浪漫:跟 AI 一起為自己辦的研討會寫一個售票系統
eddie
0
690
自己的售票系統自己做!
eddie
0
730
AI Agent 時代的開發者生存指南
eddie
4
2.9k
print("Hello, World")
eddie
2
720
為你自己學 Python - 冷知識篇
eddie
1
530
為你自己學 Python
eddie
0
840
Generative AI 年會小聚 - AI 教我寫程式
eddie
0
300
讓數據說話:用 Python、Prometheus 和 Grafana 講故事
eddie
0
830
AI 時代的程式語言學習法
eddie
0
340
Other Decks in Programming
See All in Programming
Compiling a real-world CLI tool to native with Static Hermes
tmikov2023
0
110
Kotlinの15年とServer-Side Kotlin
n_takehata
1
130
Unity6 URPによる海底をテーマにしたVJシステムの解説 | Unity Shader 完全に理解した 勉強会
gam0022
0
360
dotNET_vulnclicker_intro.pdf
deka_morita
0
140
re:Inventに行く前に知っておきたい現地参加のノウハウ
nokomoro3
0
410
AIに “答え“を書かせるのを やめてみた
___akari11
0
120
コードレビューのボトルネックを"する側"と"される側"の両面から解消する
yub0n
2
1.6k
自サークルのIdPからログアウトできるようになるまで
taiseiue
1
130
すこし踏み込む CancellationToken
htkym
2
1.7k
プロダクトコードからライブラリの境界を見つける
elmetal
PRO
0
110
設計次第でAIコードの読む量は減らせる / designing-for-code-reading
minodriven
35
16k
Embedded Swiftで作る自作USBデバイス によるiOSデバイスの自動テスト / iOSDC Japan 2026 glassfiber
glassfiber
0
330
Featured
See All Featured
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
560
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
580
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
120
120k
Navigating Weather and Climate Data
rabernat
0
550
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.4k
Abbi's Birthday
coloredviolet
4
10k
Practical Orchestrator
shlominoach
192
12k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
730
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
600
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
1k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
1
620
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