arc環境で メモリリークを起こす 7つの方法

9
ARC 環境で メモリリークを起こす 7つの方法

Upload: atsushi-yoshimura

Post on 13-Jun-2015

3.502 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: ARC環境で メモリリークを起こす 7つの方法

ARC環境でメモリリークを起こす

7つの方法

Page 2: ARC環境で メモリリークを起こす 7つの方法

①循環参照

@interface Hoge : NSObject@property (strong, nonatomic) Hoge *hoge;@end@implementation Hoge@end

Hoge *h = [[Hoge alloc] init]; h.hoge = h;

Page 3: ARC環境で メモリリークを起こす 7つの方法

②MEMCPY

Hoge *h = [[Hoge alloc] init]; memset(&h, 0, sizeof(id));

Page 4: ARC環境で メモリリークを起こす 7つの方法

③OBJC_MSGSEND

Hoge *h = [[Hoge alloc] init]; objc_msgSend(h, NSSelectorFromString(@"retain"));

Page 5: ARC環境で メモリリークを起こす 7つの方法

④CFRETAIN

Hoge *h = [[Hoge alloc] init]; CFRetain((__bridge CFTypeRef)h);

Page 6: ARC環境で メモリリークを起こす 7つの方法

⑤__BRIDGE_RETAINED

Hoge *h = [[Hoge alloc] init]; void *p = (__bridge_retained void *)h;

Page 7: ARC環境で メモリリークを起こす 7つの方法

⑥CLASS_REPLACEMETHOD

Hoge *h = [[Hoge alloc] init]; class_replaceMethod( [Hoge class], NSSelectorFromString(@"release"), imp_implementationWithBlock(^(){}), "");

Page 8: ARC環境で メモリリークを起こす 7つの方法

⑦MACH_OVERRIDE

どうもC言語の関数を書き換えるらしい。面白そうだけど難しそう!誰か教えて!

Page 9: ARC環境で メモリリークを起こす 7つの方法

タブーをあえてやるのも面白い!