1. load妙用

  2. aop面向切面编程

  3. NSNumber Or Int

  4. @()适配64位

  5. 经过漫长时间的学习 你终于掌握了iOS大法 你找到了份iOS开发的工作 信誓旦旦的要开始你的coding生涯 老板对你非常器重 然后告诉你 我觉得你的技术 是非常刁的 那这个项目就你自己来搞吧 啊哦这就意味着这个项目你就从头到尾处理 从软件的架构 到页面的展示 都交给你喽 ??

    用着自己的半吊子水平 papapa的 coding 决心一定要把代码封装好 写的漂亮 (其实是听大神说 封装 其实自己不太懂)

    项目到了尾声 老板告诉你我们的app 我们的app 将来得来个分享到朋友圈的功能吧 不然怎么体现我产品的牛逼

    然后你听说友盟比较好使(有广告的嫌疑) 你去友盟看了他们的文档 他告诉你你要在 appdelegate didFinishLaunch方法里面写了这个东西

    1
    2
    3
    4
    5
    6
    7
     [UMSocialData setAppKey:@"XX"];
        //     注册微信
     
     [UMSocialWechatHandler setWXAppId:@"XXX"  appSecret:@"XX" url:@""];
        //    注册QQ
     
     [UMSocialQQHandler setQQWithAppId:@"XXX" appKey:@"XXX" url:@""];

    过了几天 老板又说 我们需要统计下我页面的信息 你接入了友盟的统计 在appdelegate didFinishLaunch又 多了行代码

    需求是无穷无尽 我需要bug统计(fir hud) 提醒用户评分系统(iRate) 推送(jPush 信鸽 个推。。)

    当初你决心一定要把代码封装的完美 写的漂亮的心早就被老板的需求彻底打败了

    别担心 寒哥教你小技巧

    不知道你们用过 IQKeyBoardManageiRate这种智能库没

    大牛的readme 写了这段话

    Key Features
    1) CODELESS, Zero Line Of Code 不需要写任何代码
    2) Works Automatically //自动工作
    3) No More UIScrollView //不需要scrollview
    4) No More Subclasses //不需要继承父类
    5) No More Manual Work //不需要配置
    6) No More #imports //不需要导入
    其实不神奇 只是大牛用了 + load这个方法

    学习OC都知道这个代码会在一个类被加载到运行库中就会被自动调用 这不就实现了 自动调用

    写一个类继承自NSObject
    #import <foundation foundation.h="">@interface ThirdPartService : NSObject@end

    #import "ThirdPartService.h"
    #import "UMSocial.h"
    #import "UMSocialWechatHandler.h"
    #import "UMSocialQQHandler.h"
    #import <mobclick.h>
    #import <fir fir.h="">@implementation ThirdPartService
    + (void)load {static dispatch_once_t onceToken;dispatch_once(&onceToken, ^{ // TODO 这里是我自己测试的 fir hud
    [FIR handleCrashWithKey:@"XX"]; // 友盟
    [UMSocialData setAppKey:@"XX"]; // 隐藏未安装的平台
    [UMSocialConfig hiddenNotInstallPlatforms:@[UMShareToQQ,UMShareToQzone,UMShareToWechatSession,UMShareToWechatTimeline]]; // 注册微信
    [UMSocialWechatHandler setWXAppId:@"XX" appSecret:@"XX" url:@""]; // 注册QQ
    // TODO QQ的不是真的
    [UMSocialQQHandler setQQWithAppId:@"XX" appKey:@"XX" url:@""]; // TODO UM统计
    [MobClick startWithAppkey:@""];
    [MobClick setCrashReportEnabled:NO]; NSLog(@"第三方服务注册完毕");
    });
    }@end</fir></mobclick.h></foundation>
    类似于定位也可以这样写

    blob.png

    模块和服务完全拆开

    但是有的服务 如APNS需要LaunchOption 那就只能写在appdDelegate 不过这样的话已经摘除很多代码了 只剩下几个固定的 到时候再修改appDelegate就会感觉非常清晰 了

    2 ViewController继承?

    接着上面讲 我们接入了友盟统计 友盟统计最基本的东西就是 统计页面的pv

    blob.png

    友盟的这样写 对于新手的我们就觉得这不就so easy吗

    我打开了某个vc(HomeViewController)

    在代码里面写上了这句

    -(void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];#ifndef DEBUG
    [MobClick beginLogPageView:NSStringFromClass([self class])];#endif}
    -(void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];#ifndef DEBUG

    [MobClick endLogPageView:NSStringFromClass([self class])];#endif}
    然后我一个项目中可能有几十个 甚至上百个页面需要统计pv 我总不能每个节目都这样写吧

    聪明的我们想到了继承

    如MyBaseViewController:UIViewController

    这样就要做一件事 把我们项目中所有继承自UIViewController的类全部改为继承自MyBaseViewController 然而你真的觉得这样好吗 我们一个项目中有几十个控制器 我就要把每个控制器改一遍

    这种重复性的工作一是无聊 而是容易出错 你复制着复制者就会遗漏掉某个类 重要的是 我们项目中很多类并不是直接继承自UIViewController 有的可能是UITableViewController UICollectionViewContr0ller UINavigationController 甚至不常用的UISearchDisPlayController UIPopoverController ?UIPresentController 是不是突然觉得这么多啊啊 ??

    这也不是坑的 坑的是将来你混成了大牛 招了个小弟 你告诉他你所有的类都要继承自我写的各种父类 新手总是会不经意见犯错误 有些类忘记继承了 后期查起来难度非常大 浪费时间 所以这种设计是不合理的

iOS优化的更多相关文章

  1. PNG与iOS优化选项

    从App Store下载到的每一枚App最初都是一只IPA文件(其实是zip格式,内含特定规则的文件夹组织方式).但当作zip解开之后会发现里面很多的PNG文件看不了,这是因为在这些PNG图像都已被i ...

  2. iOS优化内存方法推荐

    1. 用ARC管理内存 ARC(Automatic ReferenceCounting, 自动引用计数)和iOS5一起发布,它避免了最常见的也就是经常是由于我们忘记释放内存所造成的内存泄露.它自动为你 ...

  3. iOS 优化方案浅析

    本文转载至 http://mobile.51cto.com/iphone-413256.htm Windows独特的注册表机制以及复杂的进程.内存管理,给了很多PC“优化”类软件极大的机遇,比如奇虎3 ...

  4. iOS 优化实例

    一.接口请求优化 在工程项目中,多个一级界面包含状态,如:服务入口的动态配置,未读消息数量,图片文字等,因此产品设计要每次切换 tab 时都请求数据,及时的更新页面状态.在实际开发中,频繁的调用接口, ...

  5. iOS 优化界面流畅度的探讨

    界面流畅度 大都跟list scrollView有紧密关联 流畅的视觉:就是如丝般顺滑 不流畅视觉:”卡顿”,”抖动”,”迟顿感” 以上两种状态的描述 都是基于主观感觉,对于开发者来说 确实应该有一个 ...

  6. iOS 优化ipa包,减小安装包大小

    https://www.jianshu.com/p/a49d59b01669 项目打包之后.ipa包的大小是118.9M,上传到App Store后iPhone6s上显示85.5M,下载时间太长,所以 ...

  7. ios优化复制大文件时,如何使内存运用最少且效率最高

    我也是纠结了好几天,我想自己想个办法,但是数据复制不上去,我现在还不明白,如果有人知道我错在哪了,请留言,如果还有更好的方法,请分享共同进步. ____________________________ ...

  8. iOS优化策略

    之前写的一系列文章或者小经验一直没有时间去整理放在博客上,今天整理出来,之前是写在作业部落,语法是markdown,点击链接浏览,仅供参考,希望对你有帮助. https://www.zybuluo.c ...

  9. 解决打开png图片黑屏问题(批量还原Xcode优化后的png)

    window 打开Xcode 里面的png图片会黑屏,但是在mac 打开就显示正常, 这是因为Xocde里面的png图片被 pngcrush 优化过了,需要还原它的优化,window 平台才可以打开. ...

随机推荐

  1. C#窗体上绘制矩形

    先上效果图 鼠标三个事件 private void Form1_MouseDown(object sender, MouseEventArgs e) { //记录开始点 this.mousedown ...

  2. SQL 调用 webservice

    webservice 需要配置为get 方式 sp_configure 'show advanced options', 1; GO RECONFIGURE; GO sp_configure 'Ole ...

  3. [poj3140]Contestants Division树形dp

    题意:切掉树上的某条边,使分开的两棵树上各点的权值和差值最小. 与hdu2196不同的是,此题是点权,其他无太大差别,注意数据范围. 先求出每个节点的子树权值和,然后自底向上dp即可.取$\min ( ...

  4. PLSQ创建用户L

    1.首先使用dba权限角色登陆PLSQL 2.选择File-New-User   输入需要创建的账户及密码,选择表空间 3.一定要分配的权限:Role privileges 角色权限,至少分配conn ...

  5. Oracle tns 协议

    下面是翻译国外的一篇博客,原文连接如下: https://thesprawl.org/research/oracle-tns-protocol/ 简介 TNS(Transparent Network ...

  6. maven导入jar包失败

    找到原来的jar包位置,删除,然后重新导入,还是未成功.采取了网上的各种办法,还是不行.最简单的办法就是,重装下eclipse,以及maven配置.

  7. VS2017 不能创建 vsto Excel 工作簿程序的问题

    最近想写个小程序,是基于vsto的excel 扩展程序. 打开vs2017,创建时,却提示 不能创建项目(创建项目失败,Project cannot be created).原本以为很顺利的,不相处了 ...

  8. 使用 Addr2line 将函数地址解析为函数名

    用 Addr2line 将函数地址解析为函数名 原文链接:http://www.ibm.com/developerworks/cn/linux/l-graphvis/ Addr2line 工具(它是标 ...

  9. LayUI 子父窗体的交互

    ---恢复内容开始--- 收到的工作是将一个ERP的窗体程序改为网页实现,所以就肯定需要弹框来选择(如:物料编码.部门.业务员等等) 本文采取的前段框架是LayUI. layUI的官网API网址:ht ...

  10. javascript中的scroll事件

    window.addEventListener('scroll',function(){ if(document.compatMode == "CSS1Compat") { ale ...