Successfully reported this slideshow.
Upcoming SlideShare
×

# ひろ子 in Objective-C

6,269 views

Published on

• Full Name
Comment goes here.

Are you sure you want to Yes No

Are you sure you want to  Yes  No
• Sex in your area is here: ❤❤❤ http://bit.ly/2Q98JRS ❤❤❤

Are you sure you want to  Yes  No
• ひろ子で覚えるポインタ！

Are you sure you want to  Yes  No

### ひろ子 in Objective-C

1. 1. who is ひろ子 ?
2. 2. void hiroko(int height) { if(height < 180) height = 180; } 正しくない hiroko の実装
3. 3. void hiroko(int *height) { if(*height < 180) *height = 180; } 正しい hiroko の実装（多分
4. 4. int h1 = 195; hiroko(&h1); NSLog(@"h1: %d", h1);
5. 5. int h1 = 195; hiroko(&h1); NSLog(@"h1: %d", h1); 2014-05-09 14:09:40.299 Hiroko[23593:60b] h1: 195 理想通りなのでOK
6. 6. int h1 = 195; hiroko(&h1); NSLog(@"h1: %d", h1); 2014-05-09 14:09:40.299 Hiroko[23593:60b] h1: 195 int h2 = 175; hiroko(&h2); NSLog(@"h2: %d", h2);
7. 7. int h1 = 195; hiroko(&h1); NSLog(@"h1: %d", h1); 2014-05-09 14:09:40.301 Hiroko[23593:60b] h2: 180 2014-05-09 14:09:40.299 Hiroko[23593:60b] h1: 195 int h2 = 175; hiroko(&h2); NSLog(@"h2: %d", h2); ちゃんと超能力が働いてる
8. 8. 解説 int h = 175; ! int *p; p = &h; *p = 180; ! NSLog(@"h: %d", h);
9. 9. 解説 int h = 175; ! int *p; p = &h; *p = 180; ! NSLog(@"h: %d", h); 175 h: 0xbﬀfca44
10. 10. 解説 int h = 175; ! int *p; p = &h; *p = 180; ! NSLog(@"h: %d", h); 175 h: 0xbﬀfca44 NULL p: 0xbﬀfca40
11. 11. 解説 int h = 175; ! int *p; p = &h; *p = 180; ! NSLog(@"h: %d", h); 175 h: 0xbﬀfca44 0xbfffca44 p: 0xbﬀfca40
12. 12. 解説 int h = 175; ! int *p; p = &h; *p = 180; ! NSLog(@"h: %d", h); 180 h: 0xbﬀfca44 0xbfffca44 p: 0xbﬀfca40
13. 13. 解説 int h = 175; ! int *p; p = &h; *p = 180; ! NSLog(@"h: %d", h); 2014-05-09 14:09:40.299 Hiroko[23593:60b] h: 180
14. 14. ひろ子パターン： 「どうぞ書き換えて下さい」
15. 15. ひろ子 in Objective-C?
16. 16. @interface Hiroko : NSObject ! - (void)doHirokoWithHeight:(CGFloat *)height; ! @end …?
17. 17. Objective-C (Cocoa) では、 あまりひろ子パターンは出て来ない。
18. 18. NSArray *array = @[@"a", @"b", @"c"]; ! [array enumerateObjectsUsingBlock: ^(id obj, NSUInteger idx, BOOL *stop) { ! NSLog(@"%@", obj); if([obj isEqual:@"b"]) *stop = YES; }]; ! NSLog(@"end"); ひろ子パターン その1: - [NSArray enumerateObjectsUsingBlock:]
19. 19. NSArray *array = @[@"a", @"b", @"c"]; ! [array enumerateObjectsUsingBlock: ^(id obj, NSUInteger idx, BOOL *stop) { ! NSLog(@"%@", obj); if([obj isEqual:@"b"]) *stop = YES; }]; ! NSLog(@"end"); ひろ子パターン その1: - [NSArray enumerateObjectsUsingBlock:]
20. 20. NSArray *array = @[@"a", @"b", @"c"]; ! [array enumerateObjectsUsingBlock: ^(id obj, NSUInteger idx, BOOL *stop) { ! NSLog(@"%@", obj); if([obj isEqual:@"b"]) *stop = YES; }]; ! NSLog(@"end"); ひろ子パターン その1: - [NSArray enumerateObjectsUsingBlock:]
21. 21. NSArray *array = @[@"a", @"b", @"c"]; ! [array enumerateObjectsUsingBlock: ^(id obj, NSUInteger idx, BOOL *stop) { ! NSLog(@"%@", obj); if([obj isEqual:@"b"]) *stop = YES; }]; ! NSLog(@"end"); 2014-05-09 14:50:04.508 Hiroko[24612:60b] a 2014-05-09 14:50:04.509 Hiroko[24612:60b] b 2014-05-09 14:50:04.509 Hiroko[24612:60b] end ひろ子パターン その1: - [NSArray enumerateObjectsUsingBlock:]
22. 22. NSData *data = ...; ! NSError *error = nil; ! id json = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error]; if(json && !error) { ... } ひろ子パターン その2: NSError ** として
23. 23. NSData *data = ...; ! NSError *error = nil; ! id json = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error]; if(json && !error) { ... } ひろ子パターン その2: NSError ** として nil NSError *error NSError
24. 24. NSData *data = ...; ! NSError *error = nil; ! id json = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error]; if(json && !error) { ... } ひろ子パターン その2: NSError ** として nil NSError *error 0xf8193ab NSError **errorPtr NSError 引数として渡される
25. 25. NSData *data = ...; ! NSError *error = nil; ! id json = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error]; if(json && !error) { ... } ひろ子パターン その2: NSError ** として nil NSError *error 0xf8193ab NSError **errorPtr (オブジェクトの実体) NSError エラー発生！
26. 26. NSData *data = ...; ! NSError *error = nil; ! id json = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error]; if(json && !error) { ... } ひろ子パターン その2: NSError ** として 0xf19274a NSError *error 0xf8193ab NSError **errorPtr (オブジェクトの実体) NSError 代入されて処理が戻る
27. 27. NSData *data = ...; ! NSError *error = nil; ! id json = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error]; if(json && !error) { ... } ひろ子パターン その2: NSError ** として 0xf19274a NSError *error (オブジェクトの実体) NSError ↑ nil でなくなっているので通らない
28. 28. Objective-C でも ひろ子はたまに出てくる。
29. 29. Thanks.