当前位置: 首页 > news >正文

网站推广策划方案毕业设计手机兼职做什么好

网站推广策划方案毕业设计,手机兼职做什么好,昆山app网站制作,工作总结开头和结束语一、遍历类的属性#xff0c;快速归档 在 iOS 中#xff0c;可以使用 Runtime 遍历类的属性来实现快速的归档#xff08;Archiving#xff09;操作。归档是将对象转换为数据流以便存储或传输的过程。下面是一个简单的示例#xff0c;展示如何使用 Runtime 遍历类的属性进…一、遍历类的属性快速归档 在 iOS 中可以使用 Runtime 遍历类的属性来实现快速的归档Archiving操作。归档是将对象转换为数据流以便存储或传输的过程。下面是一个简单的示例展示如何使用 Runtime 遍历类的属性进行归档操作 假设有一个名为 Person 的类我们想要对其属性进行归档操作 #import objc/runtime.hinterface Person : NSObject NSCoding property (nonatomic, strong) NSString *name; property (nonatomic, assign) NSInteger age; endimplementation Person- (void)encodeWithCoder:(NSCoder *)coder {unsigned int count;objc_property_t *properties class_copyPropertyList([self class], count);for (int i 0; i count; i) {objc_property_t property properties[i];NSString *propertyName [NSString stringWithUTF8String:property_getName(property)];id propertyValue [self valueForKey:propertyName];[coder encodeObject:propertyValue forKey:propertyName];}free(properties); }- (instancetype)initWithCoder:(NSCoder *)coder {self [super init];if (self) {unsigned int count;objc_property_t *properties class_copyPropertyList([self class], count);for (int i 0; i count; i) {objc_property_t property properties[i];NSString *propertyName [NSString stringWithUTF8String:property_getName(property)];id propertyValue [coder decodeObjectForKey:propertyName];[self setValue:propertyValue forKey:propertyName];}free(properties);}return self; }end在上面的示例中encodeWithCoder: 方法遍历了 Person 类的所有属性并将属性的值使用 NSCoder 进行归桋操作。initWithCoder: 方法则对归档的数据进行解档恢复对象的状态。 通过使用 Runtime 遍历类的属性我们可以实现一个通用的归档和解档方法而无需手动编写大量的归档代码。这样可以提高代码的复用性和可维护性。 二、字典转模型 1、创建一个NSObject的分类 interface NSObject (Json)(instancetype)dictToModel:(NSDictionary *)dict; end2、实现分类中字典转模型的方法 #import NSObjectJson.h #import objc/runtime.himplementation NSObject (Json) (instancetype)dictToModel:(NSDictionary *)dict {id obj [[self alloc] init];unsigned int count 0;Ivar *ivars class_copyIvarList([self class], count);for (int i0; icount; i) {Ivar ivar ivars[i];NSMutableString *name [NSMutableString stringWithUTF8String:ivar_getName(ivar)];[name deleteCharactersInRange:NSMakeRange(0, 1)]; [obj setValue:dict[name] forKey:name];}return obj; } end3、调用字典转模型的方法 - (void)viewDidLoad {[super viewDidLoad];NSMutableDictionary *dict [[NSMutableDictionary alloc] init];[dict setObject:张三 forKey:name];[dict setObject:20 forKey:age];[dict setObject:北京 forKey:address];Student *student [Student dictToModel:dict];NSLog(name:%\n,student.name);NSLog(age:%\n,student.age);NSLog(address:%\n,student.address); }4、运行结果 2019-04-13 10:51:32.1365680800 AppLife[19195:4640916] name:张三 2019-04-13 10:51:32.1367070800 AppLife[19195:4640916] age:20 2019-04-13 10:51:32.1368030800 AppLife[19195:4640916] address:北京三 防止数组插入空值 1、创建一个NSMutableArray的分类 interface NSMutableArray (Extension)end2、实现分类中方法的交换 #import NSMutableArrayExtension.h #import objc/runtime.himplementation NSMutableArray (Extension) (void)load {static dispatch_once_t onceToken;dispatch_once(onceToken, ^{Class cls NSClassFromString(__NSArrayM);Method method1 class_getInstanceMethod(cls, selector(insertObject:atIndex:));Method method2 class_getInstanceMethod(cls, selector(cs_insertObject:atIndex:));method_exchangeImplementations(method1, method2);}); }- (void)cs_insertObject:(id)anObject atIndex:(NSUInteger)index {if (anObject nil) {return;}[self cs_insertObject:anObject atIndex:index]; }end 3、调用 #import NSMutableArrayExtension.h #import objc/runtime.himplementation NSMutableArray (Extension) (void)load {static dispatch_once_t onceToken;dispatch_once(onceToken, ^{Class cls NSClassFromString(__NSArrayM);Method method1 class_getInstanceMethod(cls, selector(insertObject:atIndex:));Method method2 class_getInstanceMethod(cls, selector(cs_insertObject:atIndex:));method_exchangeImplementations(method1, method2);}); }- (void)cs_insertObject:(id)anObject atIndex:(NSUInteger)index {if (anObject nil) {return;}[self cs_insertObject:anObject atIndex:index]; }end 4、运行结果 2019-04-13 11:24:19.5623630800 AppLife[20661:4661256] (Test )运用Rutime中交换方法的思想还可以实现拦截所有按钮的点击时间和防止字典中插入空值等。 四、给分类添加属性 1、在分类里声明一个属性 #import Student.hinterface Student (Test) property (nonatomic, copy) NSString *englishName; end2、实现get和set方法 implementation Student (Test)- (void)setEnglishName:(NSString *)englishName {// 第一个参数给哪个对象添加关联// 第二个参数关联的key通过这个key获取// 第三个参数关联的value// 第四个参数:关联的策略objc_setAssociatedObject(self, EnglishName, englishName, OBJC_ASSOCIATION_RETAIN_NONATOMIC); }- (NSString *)englishName {return objc_getAssociatedObject(self, EnglishName); }end 五、其他 (1) 实现第一个场景跟踪程序每个ViewController展示给用户的次数可以通过Method Swizzling替换ViewDidAppear初始方法。创建一个UIViewController的分类重写自定义的ViewDidAppear方法并在其load方法中实现ViewDidAppear方法的交换。 (2) 开发中常需要在不改变某个类的前提下为其添加一个新的属性尤其是为系统的类添加新的属性这个时候就可以利用Runtime的关联对象Associated Objects来为分类添加新的属性了。 (3) 实现字典的模型和自动转换优秀的JSON转模型第三方库JSONModel、YYModel等都利用runtime对属性进行获取赋值等操作要比KVC进行模型转换更加强大更有效率。阅读YYModel的源码可以看出YY大神对NSObject的内容进行了又一次封装添加了许多描述内容。其中YYClassInfo是对Class进行了再次封装而YYClassIvarInfo、YYClassMethodInfo、YYClPropertyInfo分别是对Class的Ivar、Method和property进行了封装和描述。在提取Class的相关信息时都运用了Runtime。
http://www.w-s-a.com/news/138393/

相关文章:

  • 校园网站建设管理工作制度大网站开发费用
  • 做logo赚钱的网站分类网站 模板
  • 网站建设完成报告织梦网站怎么做备份
  • 邯郸市城乡建设管理局网站vimwiki wordpress
  • 如何修改wordpress站名如何制作公司网站
  • 宁波网站建设与推广方案网站有了备案号之后能做什么
  • 汕头手机端建站模板pinterest app下载
  • 网站主机免费宁波网站建设优化诊断
  • 吧网站做软件的软件下载简单的ui界面制作
  • 陕西网站制作公司网页制作与设计代码
  • 做网站行情郑州微信网站开发
  • 河间网站建设制作null wordpress theme
  • h5网站制作网站开发网站建设文翻译工作
  • 网站建设 税种秦皇岛哪有网站优化公司
  • 专业开发网站设计找人做网页需要多少钱
  • 手机购物网站 建站网站建设网站制作网站设计
  • 基于iview的网站开发模板小程序制作需要什么语言
  • 精美网站设计保定建行网站首页登录
  • 网站建设常见问题做网站保存什么格式最好
  • 营销型网站建设与网页设计网站建设 amp 找VX cp5173
  • 新网站该如何做网站优化呢儿童手工
  • 湖北现代城市建设集团网站搜索引擎优化的作用
  • 上海做网站吧开一家软件开发公司需要什么
  • 阿里巴巴网站建设改图片建设厅官方网站河南
  • 邓砚谷电子商务网站建设镇江网
  • 网站空间支持什么程序工作服款式
  • 网站单页品牌网站建设 蝌蚪5小
  • 怎么做外贸网站需注意哪些做电脑系统的网站
  • 网站建设介绍推广用语河南网站优化外包服务
  • 课程网站模板贵州省城乡与建设厅网站