iOS开发中的几种模式总结

1.代理模式

在开发中我们经常使用代理,或自己写个代理,而代理属性都用weak(assign)修饰,看过有些开发者用strong(retain),但并没发现有何不妥,也不清楚weak(assign)与strong(retain)修饰有何区别

功能实现就行了,考虑这么多干嘛~~~我只能哈哈哈

weak:指明该对象并不负责保持delegate这个对象,delegate这个对象的销毁由外部控制

@property (nonatomic, weak) iddelegate;

strong:该对象强引用delegate,外界不能销毁delegate对象,会导致循环引用(Retain Cycles)

@property (nonatomic, strong) iddelegate;

谁提出代理就在该类写一个代理协议和声明一个代理人(一定要weak修饰代理人)

//其他类实现这个代理的话就要签订协议

2.KVO观察者模式

//赋值的时候必须用self取值不能用下划线取值

//b) 给模态视图定义一个观察者

[_modalViewController addObserver:self

forKeyPath:@"textLabel"

options:NSKeyValueObservingOptionNew

context:nil];

//方法

- (void) observeValueForKeyPath:(NSString *)keyPath

ofObject:(id)object

change:(NSDictionary *)change

context:(void *)context {

// NSLog(@"old = %@, new = %@", [change objectForKey:@"old"], [change objectForKey:@"new"]);

//1) 获取值得变化

NSString *text = [change objectForKey:@"new"];

//2) 通过tage获取label

UILabel *label = (UILabel *) [self.view viewWithTag:1000];

//3) 改变label的值

label.text = text;

}

3.通知

// 发送通知

NSDictionary *userInfo = @{@"text" : textField.text};

[[NSNotificationCenter defaultCenter] postNotificationName:kTextFieldTextChangeNotification

object:nil

userInfo:userInfo];

//接收通知

[[NSNotificationCenter defaultCenter] addObserver:self

selector:@selector(receiveNotification:)

name:kTextFieldTextChangeNotification

object:nil];

4.单例方法

//1. 定义一个静态全局变量

static RootViewController *instance = nil;

@implementation RootViewController

//2. 实现类方法

+ (instancetype) sharedInstance {

@synchronized(self) {

if (instance == nil) {

//初始化单例模式

instance = [[RootViewController alloc] init];

}

}

return instance;

}

//说明:这里的的复写目的是防止用户无意之间采用[[RootViewController alloc] init]进行初始化

+ (instancetype) allocWithZone:(struct _NSZone *)zone {

@synchronized(self) {

if (instance == nil) {

//说明:这里的实例是进行内存的分配

instance = [super allocWithZone: zone];

}

}

return instance;

}

你可能感兴趣的:(iOS开发中的几种模式总结)