Más contenido relacionado
La actualidad más candente (20)
Similar a Arc of developer part1 (11)
Arc of developer part1
- 3. •
•
• EXC_BAD_ACCESS
•2 release
• NSZombie
•
•
11 11 22
- 4. ARC
• GC
•
• retain/release 2.5
• autoreleasepool 6
• objc_msgSend 33%
11 11 22
- 6. ARC
• ARC
• LLVM3.0
• -fobjc-arc
11 11 22
- 7. • -fno-objc-arc
11 11 22
- 8. • iOS4 weak reference
• __unsafe_unretained
• weak reference
11 11 22
- 9. • __strong
• __weak
• __unsafe_unretained
• __autoreleasing
•
11 11 22
- 11. •
• VB6
• COM
• Objective-C
•
• JAVA .NET Obj-C GC
11 11 22
- 13. • NSObject *obj = [[NSObject alloc]init];
• NSObject *obj2 = [obj retain];
* obj
NSObject
2
* obj2
11 11 22
- 14. • NSObject *obj = [[NSObject alloc]init];
• NSObject *obj2 = [obj retain];
• [obj release];
NSObject
1
* obj2
11 11 22
- 15. • NSObject *obj = [[NSObject alloc]init];
• NSObject *obj2 = [obj retain];
• [obj release];
• [obj2 release]; NSObject
0
11 11 22
- 16. Autorelease
•
+(id)array{
NSMutableArray *array = [[[NSMutableArray alloc]init]autorelease];
return array;
}
* array
NSArray
1
11 11 22
- 17. Autorelease
•
+(id)array{
NSMutableArray *array = [[[NSMutableArray alloc]init]autorelease];
return array;
}
* array
NSArray
release 1
autorelease pool
11 11 22
- 18. Autorelease
•
+(id)array{
NSMutableArray *array = [[[NSMutableArray alloc]init]autorelease];
return array;
}
NSArray
release 1
autorelease pool
11 11 22
- 19. Autorelease
•
+(id)array{
NSMutableArray *array = [[[NSMutableArray alloc]init]autorelease];
return array;
}
NSArray
0
11 11 22
- 24. ARC
•
• Retain Release
11 11 22
- 25. • __strong
• __weak
• __unsafe_unretained
• __autoreleasing
11 11 22
- 26. nil
• nil
• id __strong obj1;
• id __strong obj1 = nil;
11 11 22
- 27. __strong
•
• id
• id test = [[NSObject alloc]init];
• id __strong test = [[NSObject alloc]init];
• retain release
• strong
11 11 22
- 28. __strong
• dealloc release
• release
• Retain
• Release
11 11 22
- 29. __strong
+1 +1
{
NSMutableArray *array = [[NSMutableArray alloc]init];
[array addObject:[[NSObject alloc]init]];
[array addObject:[[NSObject alloc]init]];
[array addObject:[[NSObject alloc]init]];
[array addObject:[[NSObject alloc]init]];
}
• array +1
• array -1
11 11 22
- 30. Retain
{
NSMutableArray *array = [[NSMutableArray alloc]init];
[array addObject:[[NSObject alloc]init]];
[array addObject:[[NSObject alloc]init]];
[array addObject:[[NSObject alloc]init]];
[array addObject:[[NSObject alloc]init]];
}
@property (nonatomic,retain) NSMutableArray *array;
{
self.array = [[[NSMutableArray alloc]init]autorelease];
[array addObject:[[[NSObject alloc]init]autorelease]];
[array addObject:[[[NSObject alloc]init]autorelease]];
[array addObject:[[[NSObject alloc]init]autorelease]];
[array addObject:[[[NSObject alloc]init]autorelease]];
}
11 11 22
- 31. Autorelease
• Relase
+1 +1
{
NSMutableArray *array = [[NSMutableArray alloc]init];
[array addObject:[[NSObject alloc]init]];
[array addObject:[[NSObject alloc]init]];
[array addObject:[[NSObject alloc]init]];
[array addObject:[[NSObject alloc]init]];
}
11 11 22
- 32. • autorelease
• autorelease pool
+(id)array{
id obj = [[NSMutableArray alloc]init];
return obj;
}
11 11 22
- 33. assign __unsafe_unretained
copy __strong
retain __strong
strong __strong
unsafe_unretained __unsafe_unretained
weak __weak
11 11 22
- 34. strong
• release retain
•
11 11 22
- 38. A
B C
assign
E D
11 11 22
- 39. @interface Test : NSObject{
id childObject;
}
-(void)setObject:(id)child;
@end
{
id test1 = [[Test alloc]init];
id test2 = [[Test alloc]init];
[test1 setObject:test2];
[test2 setObject:test1];
}
11 11 22
- 40. {
id test1 = [[Test alloc]init];
id test2 = [[Test alloc]init];
[test1 setObject:test2];
[test2 setObject:test1];
}
test1 test2
test1 test2
11 11 22
- 41. __weak
• Retain
@interface Test : NSObject{
id __weak childObject;
}
-(void)setObject:(id)child;
@end
test1 test2
11 11 22
- 42. __weak
• nil
•
test1 test2
11 11 22
- 43. __weak
+1
id __weak obj = [[NSObject alloc]init];
• delegate
11 11 22
- 44. autorelease pool
•
• Thread
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];
//
[pool drain];
@autoreleasepool {
//
}
• LLVM3.0 ARC
11 11 22