ARC 基础(下)
一、ARC与Block
Blocks 和 ARC 结合起来效果很好。实际上,ARC 使得在使用 blocks 时比从前更简单。
正如你可能知道的,blocks 最初在栈上创建。如果你想要保持一个 block 超过目前范围依然 可以被使用,你不得不把它复制到堆里通过[copy]或者 Block_copy()函数。现在 ARC 自 动实现。
1 #import <UIKit/UIKit.h> 2 typedef void (^AnimatedViewBlock)( CGContextRef context, 3 CGRect rect, CFTimeInterval totalTime, CFTimeInterval deltaTime);
4 @interface AnimatedView : UIView 5 @property (nonatomic, copy) AnimatedViewBlock block; 6 @end 7 8 #import "AnimatedView.h"
9 @implementation AnimatedView
10 @synthesize block; 11 - ( void)dealloc 12 { 13 NSLog(@"dealloc AnimatedView" ); 14 } 15 @end
二、单例
1 @interface GradientFactory : NSObject
2 + ( id)sharedInstance;
3 @end
4
5 + (id)sharedInstance{
6 static GradientFactory *sharedInstance;
7 if (sharedInstance == nil){
8 sharedInstance = [[GradientFactory alloc] init];
9 }
10 return sharedInstance;
11 }
多线程下的单例
1 + ( id)sharedInstance {
2 static GradientFactory *sharedInstance;
3 static dispatch_once_t done;
4 dispatch_once (&done, ^{
5 sharedInstance = [[ GradientFactory });
6 return sharedInstance;
7 }
Dispatch 库的 dispatch_once()方法以确保对象的 alloc 和 init 确实只被执行一次,即使同一时刻多个线程尝试去执行这个 block。
三、创建你自己的静态库
选择 New Project。选择 iOS\Framework & Library\Cocoa Touch Static Library 工程模版。