iOS优化

  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 : [email protected]

    #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 是不是突然觉得这么多啊啊 ??

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

时间: 2024-10-11 06:21:06

iOS优化的相关文章

PNG与iOS优化选项

从App Store下载到的每一枚App最初都是一只IPA文件(其实是zip格式,内含特定规则的文件夹组织方式).但当作zip解开之后会发现里面很多的PNG文件看不了,这是因为在这些PNG图像都已被iOS开发工具「优化」过了. Bjango.com的一篇文章提到了不管开发者事先对PNG做了何种优化(例如优化色彩范围这种),最终得到的结果都是一样的文件尺寸-因为Xcode编译后把所有PNG都按自己的方式再处理了. 苹果究竟要对每个PNG做了什么?为啥呢. 苹果的提供的开发者文档以及各种会议/视频中

iOS优化内存方法推荐

1. 用ARC管理内存 ARC(Automatic ReferenceCounting, 自动引用计数)和iOS5一起发布,它避免了最常见的也就是经常是由于我们忘记释放内存所造成的内存泄露.它自动为你管理retain和release的过程,所以你就不必去手动干预了.忘掉代码段结尾的release简直像记得吃饭一样简单.而ARC会自动在底层为你做这些工作.除了帮你避免内存泄露,ARC还可以帮你提高性能,它能保证释放掉不再需要的对象的内存. 2. 在正确的地方使用 reuseIdentifier 一

iOS 优化实例

一.接口请求优化 在工程项目中,多个一级界面包含状态,如:服务入口的动态配置,未读消息数量,图片文字等,因此产品设计要每次切换 tab 时都请求数据,及时的更新页面状态.在实际开发中,频繁的调用接口,频繁的刷新界面显然是影响用户体验的,所以需要进行优化,优化的思路有以下几点: 使用 loading + 默认灰色矩形视图: 每隔 15s 以上才请求一次,防止频繁触发请求 @property (nonatomic, assign) CFTimeInterval lastTi; - (void)vie

iOS 优化内存(三)iOS应用程序多语言本地化解决方案

iOS应用程序多语言本地化解决方案 最近要对一款游戏进行多语言本地化,在网上找了一些方案,加上自己的一点点想法整理出一套方案和大家分享! 多语言在应用程序中一般有两种做法: 一.程序中提供给用户自己选择的机会: 二.根据当前用户当前移动设备的语言自动将我们的app切换对应语言. 第一种做法比较简单完全靠自己的发挥了,这里主要讲第二种做法,主要分一下几点: 1.本地化应用程序名称 2.本地化字符串 3.本地化图片 4.本地化其他文件 1.本地化应用程序名称 (1)点击"new file"

iOS 优化内存(四)何时用self

iOS何时使用self. 大多数的答案是:"这与objc的存取方法有关" 怎么样才能有关呢?接下来通过几个小例子来看一下. 首先我们创建一个学生类:Student类 这个学生类里有学生的id和学生的姓名name #import @interface Student : NSObject{ //idname NSString *id; NSString *name; } @property (nonatomic,strong) NSString *id; @property (nonat

iOS 优化内存(五)开发流程总结

iOS开发流程总结 流程:注册.开发.真机测试.发布以及上线. iPhone iOS 4从注册到app上线开发流程 一.关于注册账号IDP和Apple ID: 1.注册App ID(无论是iOS使用者还是开发者都需要*****ID,只是后者还需要付99$注册成为开发者.) 网址:http://developer.apple.com 由于上边的网址没有注册按钮,所以去iTunes注册,方法参照(这里注册的是免费的,您需要注册付费的): http://jingyan.baidu.com/articl

iOS 优化内存(六)开发必不可少的75个工具

iOS 开发者必不可少的 75 个工具 如果你去到一位熟练的木匠的工作室,你总是能发现他/她有一堆工具来完成不同的任务. 软件开发同样如此.你可以从软件开发者如何使用工具中看出他水准如何.有经验的开发者精于使用工具.对你目前所使用的工具不断研究,同时了解一些替代品的使用,当你目前所用的工具无法满足你的需要时可以填补空缺. 记住了这些,我将向你展示一份关于各种工具的长长的列表.其中一些我每天都用,其他的我看情况使用.如果你还有更多的工具想展示在这个列表里,可以跟我留言哦亲. 我尽我所能给列表分分类

iOS 优化内存(七)开发中使用第三方类库

在iOS中使用第三方类库 方法一:直接复制所有源文件到项目中 这种方法就是把第三方类库的所有源文件复制到项目中,直接把所有.h和.m文件拖到XCode项目中即可.如果第三方类库引用了一些系统自带类库,那么在项目中还需要额外引用那些类库. 如果当前的项目启用了ARC,而引用的第三方类库未使用ARC,那还需要在项目信息的Targets – Build Parses里找到第三方类库的.m文件,并为它们加上-fno-objc-arc标记. 而对于在未启用ARC的项目用引用使用了ARC的第三方类库,则需要

iOS 优化内存(八)持久化

iOS持久化 1.文件系统 不管是Mac OS X 还是iOS的文件系统都是建立在UNIX文件系统基础之上的. 1.1 沙盒模型 在iOS中,一个App的读写权限只局限于自己的沙盒目录中. 沙盒模型到底有哪些好处呢? 安全:别的App无法修改你的程序或数据 保护隐私:别的App无法读取你的程序和数据 方便删除:因为一个App所有产生的内容都在自己的沙盒中,所以删除App只需要将沙盒删除就可以彻底删除程序了 iOS App沙盒中的目录 App Bundle ,如xxx.app 其实是一个目录,里面