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

#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. IT兄弟连 Java语法教程 运行Java程序

    编译好Java字节码文件后,接下来就应该运行Java程序了. 运行Java程序需要使用JDK中提供的java命令,因为已经把java命令所在的路径添加到了系统的Path环境变量中,因此现在可以直接使用 ...

  2. Jquery基本教程(背还是要背的)

    Jquery入门学习 一.简介 1.Jquery是基于JavaScript的一种框架,兼容主流浏览器,提供了dom,animate(JQ+CSS),ajax; 2.Jquery2.0后版本不支持IE6 ...

  3. Whatweb网站指纹信息收集工具

    常规扫描:whatweb www.baidu.com 批量扫描: whatweb -i /root/12.txt 详细回显扫描:whatweb -v www.baidu.com 加强扫描强度:what ...

  4. C 语言实例 - 求两数最小公倍数

    C 语言实例 - 求两数最小公倍数 用户输入两个数,其这两个数的最小公倍数. 实例 - 使用 while 和 if #include <stdio.h> int main() { int ...

  5. Swing 100行画图示例

    关键内容,可以自行扩展 package main; import java.awt.BasicStroke; import java.awt.BorderLayout; import java.awt ...

  6. codeforces840E In a Trap

    好巧妙啊,感觉从来没有用过按位dp的trick,也没有用过树上链分块的trick 挂个链,全程看他的思路写的,当然lych帮我理解了最难懂的一部分 首先这里有个玄学的分块 每个点统计它上面256(其实 ...

  7. High waits on control file sequential read

    High waits on control file sequential read (文档 ID 2277867.1) In case we run into an issue where cont ...

  8. jQuery:如何给动态生成的元素绑定事件?

    jQuery的html()可以给现在元素附加新的元素,innerHTML也可以,那么,如何给这些新生成的元素绑定事件呢?直接在元素还未生成前就绑定肯定是无效的,因为所绑定的元素目前根本不存在. 然而, ...

  9. iOS 面试常问之多线程

    本片围绕多线程全面展开叙述. 1.为什么要有多线程/多线程是用来干什么的? 2.多线程是什么? 3.如何创建多线程? 4.多线程在哪些情况下会使用/多线程使用场景? 5.三种多线程的优缺点? 6.线程 ...

  10. SpringBoot 2.x (14):WebFlux响应式编程

    响应式编程生活案例: 传统形式: 一群人去餐厅吃饭,顾客1找服务员点餐,服务员把订单交给后台厨师,然后服务员等待, 当后台厨师做好饭,交给服务员,经过服务员再交给顾客1,依此类推,该服务员再招待顾客2 ...