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

#pragma mark - 代码控制Home按键

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

#pragma mark - 获取UIWebView的高度

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

#pragma mark - 是否自动锁屏

[UIApplication sharedApplication].idleTimerDisabled=YES; //不自动锁屏

[UIApplication sharedApplication].idleTimerDisabled=NO;//自动锁屏(默认)

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

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

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

Person.h 遵守 <NSSecureCoding>

Person.m 中, 增加如下代码

//导入 runtime头文件
#import <objc/runtime.h> // 实现下面三个方法
+ (BOOL)supportsSecureCoding {
return YES;
} //如何归档 如何存值
- (void)encodeWithCoder:(NSCoder *)aCoder {
unsigned int outCount = ;
Ivar * ivars = class_copyIvarList([self class], &outCount); for (int i = ; i < outCount; i++) {
Ivar ivar = ivars[i];
const char * name = ivar_getName(ivar);
NSString * key = [NSString stringWithUTF8String:name];
[aCoder encodeObject:[self valueForKey:key] forKey:key];
}
free(ivars);
} //如何解档 如何取值
- (nullable instancetype)initWithCoder:(nonnull NSCoder *)aDecoder {
if (self) {
unsigned int outCount = ;
Ivar * ivars = class_copyIvarList([self class], &outCount); for (int i = ; i < outCount; i++) {
Ivar ivar = ivars[i];
const char * name = ivar_getName(ivar);
NSString * key = [NSString stringWithUTF8String:name];
[self setValue:[aDecoder decodeObjectForKey:key] forKey:key];
}
free(ivars);
}
return self;
}

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

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

Person.h 中 遵守 <NSCopying, NSMutableCopying>

Perosn.m 中 增加如下代码

// 导入 runtime 头文件
#import <objc/runtime.h> // copy最后会调用这个方法
- (id)copyWithZone:(NSZone *)zone {
id mode = [[[self class] allocWithZone:zone] init]; unsigned int count = ;
Ivar *ivars = class_copyIvarList([self class], &count);
//ivars[100]不会崩溃但是数据不对,类似数组的东西
for (int i = ; i<count; i++) {
// 取出i位置对应的成员变量
Ivar ivar = ivars[i]; // 查看成员变量
const char *name = ivar_getName(ivar);
// 设置到成员变量身上
NSString *key = [NSString stringWithUTF8String:name]; id value = [self valueForKey:key];
[mode setValue:value forKey:key];
} free(ivars); return mode;
} //mutableCopy 最后会调用这个方法(自定义的对象的 copy 方法复制出来的对象就是深复制,写这个方法是为了安全起见)
- (id)mutableCopyWithZone:(NSZone *)zone {
return [self copyWithZone:zone];
}

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. Mac环境下制作ubantu安装盘

    前言:ubantu为Linux发行版之一,此方法亦可制作其他Linux发行版 1.在磁盘工具中将准备好的u盘格式化为Mac OS扩展(日志型),并确保分区的模式是GUID分区 2.官网自行下载uban ...

  2. 本机和虚拟机互联 设置静态IP vmware 虚拟网络 桥接 NAT 仅主机 自定义

  3. CC10:访问单个节点的删除

    题目 实现一个算法,删除单向链表中间的某个结点,假定你只能访问该结点. 给定待删除的节点,请执行删除操作,若该节点为尾节点,返回false,否则返回true 解法 这道题并不难,主要是题目中这句话确定 ...

  4. CF438D The Child and Sequence 线段树

    给定数列,区间查询和,区间取模,单点修改. n,m小于10^5 ...当区间最值小于模数时,就直接返回就好啦~ #include<cstdio> #include<iostream& ...

  5. CodeForces - 500A-New Year Transportation(模拟)

    New Year is coming in Line World! In this world, there are n cells numbered by integers from 1 to n, ...

  6. MySQL数据库(4)

    子查询,MYSQL创建用户和授权,可视化工具N啊vicat的使用,pymysql模块的使用

  7. 位运算>>和>>>区别

    int a=-1; Integer b=0; Integer c=0; System.out.println(Integer.toBinaryString(a)); b=a>>1; c=a ...

  8. 基于.NetCore2.1。服务类库采用.Net Standard2.0,兼容.net 4.6.1消息推送服务

    基于.NetCore2.1.服务类库采用.Net Standard2.0,兼容.net 4.6.1消息推送服务 https://www.cnblogs.com/ibeisha/p/weixinServ ...

  9. python 4学习 list 和 tuple

    list Python内置的一种数据类型是列表:list.list是一种有序的集合,可以随时添加和删除其中的元素. 比如,列出班里所有同学的名字,就可以用一个list表示: >>> ...

  10. android模拟器创建时的PANIC: Could not open:错误的解决

    创建AVD之后,在启动时报如下错误,解决方法如下: 在环境变量中创建ANDROID_SDK_HOME=D:\Program Files (x86)\Android\android-sdk,后面的当然是 ...