//单例//.h+ (Instannce *)shareInstance;//.mstaticInstannce *instance =nil;@implementationInstannce//定义一个创建单例对象的方法+ (Instannce *)shareInstance {if(instance ==nil) {
instance=[[Instannce alloc] init];
}returninstance;
}//使用alloc的时候调用的方法instancetype+ (id)allocWithZone:(struct_NSZone *)zone {if(instance ==nil) {
instance=[super allocWithZone:zone];
}returninstance;
}- (id)copy {returnself;
}- (id)retain {returnself;
}-(NSUInteger)retainCount {//返回无符号最大值returnUINT_MAX;
}- (onewayvoid)release {//什么也不做}//代理//.h@PRotocolGetMessageProtocol <NSObject >
- (void)getNum:(NSString *)num withPassWord:(NSString *)pass;@end@property (nonatomic,assign)id<GetMessageProtocol>delegate;//.mif([self.delegaterespondsToSelector:@selector(getNum:withPassWord:)]) {
[self.delegategetNum:num.text withPassWord:passWord.text];
}#pragmamark - GetMessageProtocol
- (void)getNum:(NSString *)num withPassWord:(NSString *)pass {
}
registerCtrl.delegate=self;//通知 注意postNotificationName 必须一致[[NSNotificationCenter defaultCenter] postNotificationName:NotificationNameobject:self userInfo:dic];//dic存放在userinfo中 dic中存放要传过去的值是个字典//接受通知[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(changeAction:) name:NotificationNameobject:nil];//KVO监听/*KVO观察者方法
keyPath: 监听的属性名
object: 被观察的对象
change: 属性值
context: 上下设备文*/[registerCtrl addObserver:self forKeyPath:@"属性名称1"options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:nil];
[registerCtrl addObserver:self forKeyPath:@"属性名称2"options:NSKeyValueObservingOptionNew context:nil];//触发的事件- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)objectchange:(NSDictionary *)change context:(void*)context {//object的值是registerCtrlif([keyPath isEqualToString:@"属性名称1"]) {
}elseif([keyPath isEqualToString:@"属性名称2"]) {
}
}//.h@property (nonatomic, copy) NSString *属性名称1;
@property (nonatomic, copy) NSString*属性名称2;//.m 必须通过setter方法改变值或者KVC//KVO方式//触发的事件[indexCollectionView addObserver:self forKeyPath:@"属性名称"options:NSKeyValueObservingOptionNew context:nil];
[posterCollectionView addObserver:self forKeyPath:@"pathIndex"options:NSKeyValueObservingOptionNew context:nil];- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)objectchange:(NSDictionary *)change context:(void*)context {//得到改变后的新值NSInteger index = [[change objectForKey:@"new"] integerValue];
}
}//Block block的返回值 block的名称 block的参数typedefvoid(^SucccessBlock)(NSString *);//Block的定义@property(nonatomic,copy)SucccessBlock loginBlock;//block的声明 要用copy防止block的循环引用_freindBlcok(friends); block的调用
[[MyXMPPManager shareManager] getFreind:^(NSArray *freinds) {}//block的赋值 实现