ひろ子 in Objective-C

5,357 views

Published on

Published in: Software, Technology, Business
1 Comment
11 Likes
Statistics
Notes
No Downloads
Views
Total views
5,357
On SlideShare
0
From Embeds
0
Number of Embeds
157
Actions
Shares
0
Downloads
7
Comments
1
Likes
11
Embeds 0
No embeds

No notes for slide

ひろ子 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: 0xbfffca44
  10. 10. 解説 int h = 175; ! int *p; p = &h; *p = 180; ! NSLog(@"h: %d", h); 175 h: 0xbfffca44 NULL p: 0xbfffca40
  11. 11. 解説 int h = 175; ! int *p; p = &h; *p = 180; ! NSLog(@"h: %d", h); 175 h: 0xbfffca44 0xbfffca44 p: 0xbfffca40
  12. 12. 解説 int h = 175; ! int *p; p = &h; *p = 180; ! NSLog(@"h: %d", h); 180 h: 0xbfffca44 0xbfffca44 p: 0xbfffca40
  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.

×