iOS开发技巧。

来源:互联网 发布:linux cp命令 覆盖 编辑:程序博客网 时间:2024/05/29 03:45

1,工程中创建一个Base控制器,其他控制器继承Base,在Base控制器里面注册一个通知,这样可以在子控制器发送通知,可以实现在任意界面接受消息。应用范围:断网通知,断开蓝牙,断开WiFi等。

2,分类是不能添加属性和成员变量的,但是可以通过其他方法实现。

声明:

#import <CoreBluetooth/CoreBluetooth.h>#import <UIKit/UIKit.h>@interface CBPeripheral (YFlalal)@property (nonatomic, copy) NSString *animation;@property (nonatomic, copy) NSString *mac;@property (nonatomic, copy) NSString *name;@property (nonatomic, strong) NSString *Photo;@property (nonatomic, strong) NSString *userid;@property (nonatomic, copy) NSString *isLost;@property (nonatomic, copy) NSString *isBlind;@property (nonatomic, copy) NSString *uid;@property (nonatomic, strong) UIImage *iconImage;@property (nonatomic, copy) NSString *connected;@end

实现:

#import "CBPeripheral+YFlalal.h"#import <objc/runtime.h>static void * MyObjectMyCustomPorpertyKey = (void *)@"MyObjectMyCustomPorpertyKey";static void * MyObjectMyCustomPorpertyMacKey = (void *)@"MyObjectMyCustomPorpertyMacKey";static void * MyObjectMyCustomPorpertyNameKey = (void *)@"MyObjectMyCustomPorpertyNameKey";static void * MyObjectMyCustomPorpertyPhotoKey = (void *)@"MyObjectMyCustomPorpertyPhotoKey";static void * MyObjectMyCustomPorpertyUseridKey = (void *)@"MyObjectMyCustomPorpertyUseridKey";static void * MyObjectMyCustomPorpertyUidKey = (void *)@"MyObjectMyCustomPorpertyUidKey";static void * MyObjectMyCustomPorpertIconImageKey = (void *)@"MyObjectMyCustomPorpertIconImageKey";static void * MyObjectMyCustomPorpertIsLostKey = (void *)@"MyObjectMyCustomPorpertIsLostKey";static void * MyObjectMyCustomPorpertIsBlindKey = (void *)@"MyObjectMyCustomPorpertIsBlindKey";static void * MyObjectMyCustomPorpertIsConnectedKey = (void *)@"MyObjectMyCustomPorpertIsConnectedKey";@implementation CBPeripheral (YFlalal)-(void)setConnected:(NSString *)connected{    objc_setAssociatedObject(self, MyObjectMyCustomPorpertIsConnectedKey, connected, OBJC_ASSOCIATION_RETAIN_NONATOMIC);}-(NSString *)connected{    return objc_getAssociatedObject(self, MyObjectMyCustomPorpertIsConnectedKey);}-(void)setIsBlind:(NSString *)isBlind{    objc_setAssociatedObject(self, MyObjectMyCustomPorpertIsBlindKey, isBlind, OBJC_ASSOCIATION_RETAIN_NONATOMIC);}-(NSString *)isBlind{    return objc_getAssociatedObject(self, MyObjectMyCustomPorpertIsBlindKey);}-(void)setIsLost:(NSString *)isLost{    objc_setAssociatedObject(self, MyObjectMyCustomPorpertIsLostKey, isLost, OBJC_ASSOCIATION_RETAIN_NONATOMIC);}-(NSString *)isLost{    return objc_getAssociatedObject(self, MyObjectMyCustomPorpertIsLostKey);}-(UIImage *)iconImage{    return objc_getAssociatedObject(self, MyObjectMyCustomPorpertIconImageKey);}-(void)setIconImage:(UIImage *)iconImage{     objc_setAssociatedObject(self, MyObjectMyCustomPorpertIconImageKey, iconImage, OBJC_ASSOCIATION_RETAIN_NONATOMIC);}-(void)setUid:(NSString *)uid{    objc_setAssociatedObject(self, MyObjectMyCustomPorpertyUidKey, uid, OBJC_ASSOCIATION_RETAIN_NONATOMIC);}-(NSString *)uid{    return objc_getAssociatedObject(self, MyObjectMyCustomPorpertyUidKey);}-(void)setUserid:(NSString *)userid{    objc_setAssociatedObject(self, MyObjectMyCustomPorpertyUseridKey, userid, OBJC_ASSOCIATION_RETAIN_NONATOMIC);}-(NSString *)userid{    return objc_getAssociatedObject(self, MyObjectMyCustomPorpertyUseridKey);    }-(void)setPhoto:(NSString *)Photo{    objc_setAssociatedObject(self, MyObjectMyCustomPorpertyPhotoKey, Photo, OBJC_ASSOCIATION_RETAIN_NONATOMIC);}-(NSString *)Photo{    return objc_getAssociatedObject(self, MyObjectMyCustomPorpertyPhotoKey);}-(void)setAnimation:(NSString *)animation{    objc_setAssociatedObject(self, MyObjectMyCustomPorpertyKey, animation, OBJC_ASSOCIATION_RETAIN_NONATOMIC);}-(NSString *)animation{    return objc_getAssociatedObject(self, MyObjectMyCustomPorpertyKey);}-(void)setMac:(NSString *)mac{    objc_setAssociatedObject(self, MyObjectMyCustomPorpertyMacKey, mac, OBJC_ASSOCIATION_RETAIN_NONATOMIC);}-(NSString *)mac{    return objc_getAssociatedObject(self, MyObjectMyCustomPorpertyMacKey);}-(void)setName:(NSString *)name{    objc_setAssociatedObject(self, MyObjectMyCustomPorpertyNameKey, name, OBJC_ASSOCIATION_RETAIN_NONATOMIC);}-(NSString *)name{    return objc_getAssociatedObject(self, MyObjectMyCustomPorpertyNameKey);}@end
这里引用例如OC的runtime机制,通过objc_setAssociatedObject关联上一个属性。

3,block可以正向传值,也可以反向传值。

4,通知实现正向传递消息:众所周知通知要先注册才能收到消息,如果我要在一级界面发消息,二级界面响应怎门办。

这要重写二级界面的init方法。在init方法里面注册通知。

- (instancetype)init{    self = [super init];    if (self) {        [self registNotification];    }    return self;}-(void)registNotification{    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(setLocation) name:@"locating" object:nil];}
一级界面发送通知在初始化二级界面后,跳转前。

YFMapViewController *mapView = [[YFMapViewController alloc] init];        [[NSNotificationCenter defaultCenter] postNotificationName:@"locating" object:nil];        [self.navigationController pushViewController:mapView animated:YES];


4,持续更新中。。。