本文主要介绍开发中的一些实用技巧

#pragma mark - 代码控制Home按键

  1. [[UIApplication sharedApplication] performSelector:@selector(suspend)]; // 私有API

#pragma mark - 获取UIWebView的高度

  1. - (void)webViewDidFinishLoad:(UIWebView *)webView
    {
  2. CGFloat height = [[webView stringByEvaluatingJavaScriptFromString:@"document.body.offsetHeight"] floatValue];
  3.    CGRect frame = webView.frame;
  4.    webView.frame = CGRectMake(frame.origin.x, frame.origin.y, frame.size.width, height);
  5. }

#pragma mark - 是否自动锁屏

  1. [UIApplication sharedApplication].idleTimerDisabled=YES; //不自动锁屏
  2.  
  3. [UIApplication sharedApplication].idleTimerDisabled=NO;//自动锁屏(默认)

#pragma mark - NSUserDefaults处理布尔的默认值

  1. if([[NSUserDefaults standardUserDefaults] objectForKey:ID] == nil){
  2. NSLog(@"没有设置");
  3. }

#pragma mark - 归档、解档的统一实现

Person.h 遵守 <NSSecureCoding>

Person.m 中, 增加如下代码

  1. //导入 runtime头文件
  2. #import <objc/runtime.h>
  3.  
  4. // 实现下面三个方法
  5. + (BOOL)supportsSecureCoding {
  6. return YES;
  7. }
  8.  
  9. //如何归档 如何存值
  10. - (void)encodeWithCoder:(NSCoder *)aCoder {
  11. unsigned int outCount = ;
  12. Ivar * ivars = class_copyIvarList([self class], &outCount);
  13.  
  14. for (int i = ; i < outCount; i++) {
  15. Ivar ivar = ivars[i];
  16. const char * name = ivar_getName(ivar);
  17. NSString * key = [NSString stringWithUTF8String:name];
  18. [aCoder encodeObject:[self valueForKey:key] forKey:key];
  19. }
  20. free(ivars);
  21. }
  22.  
  23. //如何解档 如何取值
  24. - (nullable instancetype)initWithCoder:(nonnull NSCoder *)aDecoder {
  25. if (self) {
  26. unsigned int outCount = ;
  27. Ivar * ivars = class_copyIvarList([self class], &outCount);
  28.  
  29. for (int i = ; i < outCount; i++) {
  30. Ivar ivar = ivars[i];
  31. const char * name = ivar_getName(ivar);
  32. NSString * key = [NSString stringWithUTF8String:name];
  33. [self setValue:[aDecoder decodeObjectForKey:key] forKey:key];
  34. }
  35. free(ivars);
  36. }
  37. return self;
  38. }

PS: 更简单的方法是给 NSObject 增加一个分类, 实现上面的三个方法, 这样所有继承自 NSObject 的对象就都有了解档归档的功能
 iOS 开发常用分类 GitHub 直达链接:  https://github.com/lieryang/Category

#pragma mark - 自定义对象的copy 和 mutableCopy功能统一实现

Person.h 中 遵守 <NSCopying, NSMutableCopying>

Perosn.m 中 增加如下代码

  1. // 导入 runtime 头文件
  2. #import <objc/runtime.h>
  3.  
  4. // copy最后会调用这个方法
  5. - (id)copyWithZone:(NSZone *)zone {
  6. id mode = [[[self class] allocWithZone:zone] init];
  7.  
  8. unsigned int count = ;
  9. Ivar *ivars = class_copyIvarList([self class], &count);
  10. //ivars[100]不会崩溃但是数据不对,类似数组的东西
  11. for (int i = ; i<count; i++) {
  12. // 取出i位置对应的成员变量
  13. Ivar ivar = ivars[i];
  14.  
  15. // 查看成员变量
  16. const char *name = ivar_getName(ivar);
  17. // 设置到成员变量身上
  18. NSString *key = [NSString stringWithUTF8String:name];
  19.  
  20. id value = [self valueForKey:key];
  21. [mode setValue:value forKey:key];
  22. }
  23.  
  24. free(ivars);
  25.  
  26. return mode;
  27. }
  28.  
  29. //mutableCopy 最后会调用这个方法(自定义的对象的 copy 方法复制出来的对象就是深复制,写这个方法是为了安全起见)
  30. - (id)mutableCopyWithZone:(NSZone *)zone {
  31. return [self copyWithZone:zone];
  32. }

PS: 更简单的方法是给 NSObject 增加一个分类, 实现上面的两个方法, 这样所有继承自 NSObject 的对象就都有了copy 和 mutableCopy的功能

iOS 开发常用分类 GitHub 直达链接:  https://github.com/lieryang/Category

更多内容--> 博客导航 每周一篇哟!!!

有任何关于iOS开发的问题!欢迎下方留言!!!或者邮件lieryangios@126.com 虽然我不一定能够解答出来,但是我会请教iOS开发高手!!!解答您的问题!!!

Object-C知识点 (六) 开发中的技巧的更多相关文章

  1. Eclipse,myeclipse开发中常用技巧总结

    一.myeclipse自带包和自己部署的包冲突解决问题方案 原来的依赖设置: 修改后的配置: 二.取消Myeclipse的自动文件验证来增加myeclipse速度 1.Windows –> Pe ...

  2. iPhone开发中的技巧整理

    1.NSCalendar用法 -(NSString *) getWeek:(NSDate *)d { NSCalendar *calendar = [[NSCalendar alloc] initWi ...

  3. Mybatis学习记录(六)--开发中的小问题

    近期開始做项目,期间遇到一些小问题,开此贴记录一下 1.关于order by 今天写一个sql查询语句,用了order by可是一直没效果,后来才发现用了#{}取值,mybatis使用这个的话对于St ...

  4. C开发 中原子性操作 , 除了快什么都不剩下了

    题外话 今天,听歌曲听到一首缅怀迈克尔·杰克逊的歌曲 如下: http://music.163.com/#/song?id=1696048  Breaking News 每次听迈克尔 音乐,特别有战斗 ...

  5. cocos2dx之lua项目开发中MVC框架的简单应用

    **************************************************************************** 时间:2015-03-31 作者:Sharin ...

  6. ios开发中的小技巧

    在这里总结一些iOS开发中的小技巧,能大大方便我们的开发,持续更新. UITableView的Group样式下顶部空白处理 //分组列表头部空白处理 UIView *view = [[UIViewal ...

  7. Hybrid App 应用开发中 9 个必备知识点复习(WebView / 调试 等)

    前言 我们大前端团队内部 ?每周一练 的知识复习计划继续加油,本篇文章是 <Hybrid APP 混合应用专题> 主题的第二期和第三期的合集. 这一期共整理了 10 个问题,和相应的参考答 ...

  8. OAF开发中一些LOV相关技巧 (转)

    原文地址:OAF开发中一些LOV相关技巧 在OAF开发中,LOV的使用频率是很高的,它由两部分构成一是页面上的LOV输入框(如OAMESSageLovInputBean),二是弹出的LOV模式窗口(O ...

  9. 项目开发中的一些注意事项以及技巧总结 基于Repository模式设计项目架构—你可以参考的项目架构设计 Asp.Net Core中使用RSA加密 EF Core中的多对多映射如何实现? asp.net core下的如何给网站做安全设置 获取服务端https证书 Js异常捕获

    项目开发中的一些注意事项以及技巧总结   1.jquery采用ajax向后端请求时,MVC框架并不能返回View的数据,也就是一般我们使用View().PartialView()等,只能返回json以 ...

随机推荐

  1. codevs1553 互斥的数

    1553 互斥的数    

  2. Jeasyui的datagrid前端分页要点

    Jeasyui的分页有两种方式: 1. 服务器端分页,是真正的分页,datagridview的pager会自动把pageSize和pageNum传到后台,后台根据根据pageSize和pageNum构 ...

  3. shell学习(9)- du和df区别及详解

    清明小长假来加班,总得干点啥吧,今天就说说du 和df的区别. 1.区别 du,disk usage,是通过搜索文件来计算每个文件的大小然后累加,du能看到的文件只是一些当前存在的,没有删除的.他计算 ...

  4. Spring @Import 注解

    @Import  导入某个bean 文件 @Configuration @Import({User.class,MyImportSelector.class,MyImportBeanDefinitio ...

  5. VlAN-9-存储VLAN配置

    vlan和vtp配置可能存储在vlan.dat和运行配置中 对于vtp v3来说无论哪种模式正常和拓展范围的vlan都被存储在vlan.dat文件中,如果为透明或off,vlan配置也会出现在运行配置 ...

  6. Django之缓存+序列化+信号+ORM性能优化+验证码

    缓存 由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加 明显,最简单解决方式是使用:缓存,缓存将一个某个views的返回值保存至内存或者memcach ...

  7. Identity Service

    Identity Service - 解析微软微服务架构eShopOnContainers(二)   接上一篇,众所周知一个网站的用户登录是非常重要,一站式的登录(SSO)也成了大家讨论的热点.微软在 ...

  8. CM5.7.2 yum离线安装笔记

    一.建立yum本地服务源(yum支持http和ftp两种协议,这里使用http协议)  1.启动httpd服务   启动命令:service httpd start   关闭命令:service ht ...

  9. CQRS之旅——前言(翻译)

    探索CQRS和Event Sourcing 本项目聚焦在使用命令和查询分离模式和事件溯源(CQRS+Event Sourcing)构建一个具有高扩展,高可用和高维护性的应用程序. 本项目定位为一个学习 ...

  10. Echarts的重点

    官网中,主要看文档的”教程“和”配置项手册“这两部分 1 下载 引入js 页面放一个容器,一定要设宽高 创建对象:var myChart = echarts.init(document.getElem ...