自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

sacrifice的博客

目中有人才有路,心中有爱才有度 !

  • 博客(34)
  • 收藏
  • 关注

原创 OC对象内存大小探究

Objective-C编程语言是C语言的超集,在C语言的基础上加入了面向对象的内容。OC可以和C/C++混合使用,OC对象都可以转化为C/C++结构体表示。要想知道一个NSObject对象占用多少内存,可以通过查看NSObject对象对应的C++结构体的大小来判断。我们可以使用xcode的命令行来把指定的OC文件转成C++文件。//main.m#import <Foundat...

2019-01-31 10:44:09 838 1

原创 解决iOS11刷新tableview时抖动问题

iOS tableview开启高度估算(Self-Sizing),reloadData的时候不再全部计算高度。解决方案:在初始化tableview的时候加上这几行 _tableView.estimatedRowHeight = 0; _tableView.estimatedSectionHeaderHeight = 0; _tableView.estimatedSectionFo...

2019-01-29 13:46:07 3877

原创 点击事件的HOOK

我们在做数据埋点时,如果要做到解藕的实现,需要使用hook的方式做拦截。在做UIButton事件拦截的时候,我知道button点击后会执行sendAction:to:forEvent:方法,所以我可以hook这个方法做些其他事,那UIView的Tap事件,该拦截哪个方法呢?我们可以拦截shouldReceiveTouch- (BOOL)gestureRecognizer:(UIGes...

2019-01-08 17:10:18 2455

转载 在现有工程中实施基于CTMediator的组件化方案

国内业界大家对组件化的讨论从今年年初开始到年尾,不外乎两个方案:URL/protocol注册调度,runtime调度。 我之前批评过URL注册调度是错误的组件化实施方案,在所有的基于URL注册调度的方案中,存在两个普遍问题: 命名域渗透 因注册是不必要的,而带来同样不必要的注册列表维护成本 其它各家的基于URL注册的不同方案在这两个普遍问题上还有各种各样的其他问题,例如FR...

2018-12-27 21:05:23 560

原创 错误 ld: library not found for -lPods

ld: library not found for -lPods-XXXXclang: error: linker command failed with exit code 1 (use -v to see invocation)在将工程放到git上管理时 然后克隆下来 再打开工程可能会出现上面的问题解决办法: 在 Build Phase 下的 Link Binary With Lib...

2018-12-13 18:08:54 913

原创 iOS组建化—私有库

私有库顾名思义是私有的,我在GitHub上使用的都是公开库,出于安全与机密考虑,公司级开发都是使用私有库。下面先说几个概念。一、索引库我们每创建一个组件都会带有一个 xxx.podspec 的索引文件,这个文件包含组建框架的描述信息、框架名称、版本号、真正的代码存放地址及框架源码远程地址。那么专门用来存放这些索引文件的库就叫做索引库。索引库有本地索引库和远程索引库之分。远程索引库就是放在远...

2018-11-11 15:27:35 1821

原创 马甲包绕过审核技巧整理

现在马甲包制作越来多,很多时候上线时就会被拒,据说帮助某彩票app马甲上线成功一个可以给到一万元的酬金。废话少说,我整理了下我用到的绕过审核的方案,主要是代码混淆与更改工程名,具体附上链接:1. iOS使用Shell脚本批量修改类名称2. iOS使用shell脚本批量修改属性3.更改项目工程名...

2018-07-25 15:38:34 6874 2

原创 iOS 马甲包制作

 一、马甲包简介在ASO中马甲的意思就是内容与主APP一样,但icon图标、应用名不同,一般来说开发者的帐号是不同的,但也有的同鞋做的马甲开发者帐号都是同一样,不过这样的话,隐蔽性要差一些。做马甲有哪些好处1.替主号进行改版测试,将风险最小化。使用主App进行改版测试会存在很多弊端,马甲的好处是可以随意更改,一旦引发不良影响又不会造成很大的损失。如果测试效果良好,则可以对主Ap...

2018-07-25 15:24:56 6483 5

转载 oc调用传参入string格式json串js方法无法执行

今天遇到一个奇葩的问题,weiView执行JS代码时,总是没有效果,可是方法名与参数都没有错,代码如下: [webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"%@('%@');", methodName, paraStr]];,其中字符串paraStr格式如下{  "serverId" : "10...

2018-07-09 17:30:14 408

原创 iOS把url中含有的中文字符转化为UTF8编码

今天在写项目时,添加H5跳转链接时,发现一进入页面就白屏,但是在浏览器中可以打开页面,仔细检查后发现URL里有中文字符,就产生怀疑,感觉出问题所在,然后把url转化为utf8编码的格式恢复正常,很简单的一句话解决问题:    self.url = [self.url stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];...

2018-06-04 17:43:30 7269 1

原创 iOS面试题总结

1、设计模式是什么? 你知道哪些设计模式,并简要叙述?设计模式是一种编码经验,就是用比较成熟的逻辑去处理某一种类型的事情。1). MVC模式:Model View Control,把模型 视图 控制器 层进行解耦合编写。2). MVVM模式:Model View ViewModel 把模型 视图 业务逻辑 层进行解耦和编写。3). 单例模式:通过static关键词,声明全局变量。在整个进程运...

2018-03-13 22:17:10 671

原创 iOS端启动速度优化

应用启动流程iOS应用的启动可分为pre-main阶段和main()阶段,其中系统做的事情依次是:1. pre-main阶段1.1. 加载应用的可执行文件1.2. 加载动态链接库加载器dyld(dynamic loader)1.3. dyld递归加载应用所有依赖的dylib(dynamic library 动态链接库)对于pre-main阶段,Apple提供了一种测量各阶段的耗时的方法,在 Xco...

2018-02-26 10:11:50 1402

原创 Cocoapods创建pod公有库

一、 首先简单了解下cocoapods的机制cocoapods有个远程索引库,索引库下放着框架的描述信息:框架的名称,框架的版本号,框架的描述文件(.spec),开发者上传的代码都是位于索引库的远程地址下。当你进行pod初始化(pod setup)时,会把远程索引库下载到本地,即生成一个本地的索引库。当我们搜索某个框架时(pod search xxx),其实在本地库里索引,此时真正的内部操作是...

2017-06-14 10:00:14 608

原创 ReactiveCocoa学习之创建信号

ReactiveCocoa 是一个 iOS 中的函数式响应式编程框架,简称RAC,RAC关键解决的问题是开发中经常回见的“低聚合,高耦合”问题。在RAC出现之前,我们编写iOS代码,大部分都是在响应一些事件:按钮点击、接收网络消息、属性变化等等。但处理事件的形式在苹果官方API中却有好几种:如target-action、代理方法、KVO、回调或其它。以上这几种,往往在一个项目中基本都会使用到,在不

2017-04-17 15:07:29 636

原创 Runloop的使用

一、什么runloop从字面意思就是运行循环,他的作用体现在保持程序的持续运行,处理app中的各种事件(比如触摸事件、定时器事件、selector事件),节省cpu资源,提高程序性能:做事的时候做事,没事的时候睡眠。我们的main函数里就启动了个runloop,所以程序运行起来后并不会马上退出,保持持续运行的状态。runloop的逻辑处理:二、runloop

2016-07-08 17:43:16 416

原创 iOS9新特性

一、iOS9新出的关键字作用:用于修饰属性,方法参数,方法返回值好处:1.迎合swift           2.提高开发人员的规范,减少程序员之间的交流关键字:nonnull 对象非空               nullable 对象可以为空       null_resettable :get:不能返回为空, set可以为空     

2016-06-23 17:04:45 283

原创 CALayer使用(未完待续)

一、什么是CALayer?在iOS系统中,你能看得到摸得着的东西基本都是UIview。比如一个按钮、一个文本标签、一个文本输入框、一个图标等等,这些都是UIview。其实UIview之所以显示在屏幕上,完全是因为它内部的一个层。在创建UIview对象时,UIview内部会自动创建一个层(即CALayer对象),通过UIview的layer属性可以访问这个层。当UIview需要显示到屏幕

2016-06-22 16:35:52 317

转载 IOS开发之深拷贝与浅拷贝(mutableCopy与Copy)详解

阅读本文之前首先了解copy与retain的区别,如果有不正确的地方望大家多多指教:copy与retain的区别:copy是创建一个新对象,retain是创建一个指针,引用对象计数加1。Copy属性表示两个对象内容相同,新的对象retain为1 ,与旧有对象的引用计数无关,旧有对象没有变化。copy减少对象对上下文的依赖。       retain属性表示两个对象地址相同(建立一个

2016-06-21 21:04:42 322

原创 weak修饰符

一、在OC中,如果对象没有强引用,就会被自动释放,那么为什么控件还可以设为weak?我们平时定义控件属性的时候一般都会用strong修饰符,而我们在用xib,sb拖控件的时候会发现,这时属性都是用的weak修饰符。1. 从storyboard或者xib上创建控件,在控件放在view上的时候,已经形成了如下的引用关系,以UIButton为例:UIViewController->U

2016-06-21 20:32:07 964

原创 atomic与nonatomic区别

atomic和nonatomic区别用来决定编译器生成的getter和setter是否为原子操作。atomic提供多线程安全,是描述该变量是否支持多线程的同步访问,如果选择了atomic 那么就是说,系统会自动的创建lock锁,锁定变量。nonatomic禁止多线程,变量保护,提高性能。atomic:默认是有该属性的,这个属性是为了保证程序在多线程情况下,编译器会自动生

2016-06-21 09:55:35 584

原创 使用runtime获取成员变量

使用runtime的时候我们必须包含头文件#import。runtime 可以用来获取一个类的全部成员变量,有时我们开发时会用到一些属性,而我们直接又是访问不到的,这时runtime就有用了。获取成员变量有两种方法:通过 class_copyPropertyList 获取的成员变量仅仅是对象类的属性(@property声明的属性) unsigned int count =

2016-04-25 12:14:38 666

转载 我是如何从程序员一步一步走向产品经理(转自人人都是产品经理)

这是一篇长文,我花了差不多30分钟才看完,也是我见过有史以来最长最完整的一篇关于程序员转型产品经理的文章。创办人人都是产品经理以来,每天都有很多人问我如何转型做产品经理、转型产品经理会遇到哪些问题,其实我一直没能回答好这个问题,因为我从运营转型产品经理的过程太顺利,并且转型的过程也没有做太多的思考和总结。直到看到这篇文章...作者完整记录了自己一路来从对产品的认知到接触产品到转型产品整个过程,以及

2016-04-12 16:18:57 7464 2

原创 正确使用const,static,extern

一、const与宏的区别(面试题):const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽成宏,推荐我们使用const常量。编译时刻:宏是预编译(编译之前处理),const是编译阶段。编译检查:宏不做检查,不会报编译错误,只是替换,const会编译检查,会报编译错误。宏的好处:宏能定义一些函数,方法。 const不能。宏的坏处:使用大量宏,

2016-04-12 10:49:46 367

原创 根据图片的url获取图片的尺寸

// 根据图片url获取图片尺寸-(CGSize)getImageSizeWithURL:(id)imageURL{ NSURL* URL = nil; if([imageURL isKindOfClass:[NSURL class]]){ URL = imageURL; } if([imageURL isKindOfClass:[NSStrin

2016-03-23 10:30:35 1026

原创 态度

不管在什么地方上班,请记住:       工作不养闲人,团队不养懒人。入一行先别惦记赚钱,先学着让自己值钱。赚不到钱赚知识;赚不到知识赚经历;赚不到经历赚阅历,以上都赚到了就不可能赚不到钱。只有先改变自己的态度,才能改变人生的高度。       让人迷茫的原因只有一个,那就是本该拼搏的年纪,却想的太多,做的太少!

2016-03-16 21:11:04 227

原创 毕业后的几年, 决定你一生高度

作为年轻人,难免带着几分傲气,认为自己无所不能、所向披靡,其实不然,初入职场的新人还是个"婴儿",正处在从爬到走的成长阶段。在毕业前这几年里,一定要让自己逐步培养起学徒思维、海绵思维、空杯思维,具有这样思维的人心灵总是敞开的,能随时接受启示和一切能激发灵感的东西,他们时刻都能感受到成功女神的召唤。大学毕业后拉开差距的原因毕业这几年,我们的生活、感情、职业等都存在很多不确定的因素,这

2016-03-15 15:17:13 498

原创 iOS数据打印时怎么把编码后的文字显示成中文

我们开发中经常会打印字典数组中的数据,很多时候我们打印出来的文字数据都是UTF-8编码后的编码文字,看着很蛋疼。。。没关系,先别蛋疼,有个很有爱的方法帮你解决这个问题。方法很简单就是写个Foundation的分类,内容就是针对数组与字典!啥都不说了,直接上代码:#import @implementation NSDictionary (Log)- (NSString *)descript

2016-03-15 15:05:24 5247 2

原创 CocoaPods安装与使用

在公司中我们做iOS开发过程会经常使用一些第三方库,当然你足够牛逼你也可以自己写库,我想既然你在看我这篇博文,估计你离写框架还有段距离! 废话少说,下面直入正题:首先,CocoaPods是什么?CocoaPods是用来管理第三方库的,比如我们常用的SDWebImage,AFNetWorking。如果我们不使用pods只能手动拖到项目中,那么问题来了,如果某一天作者更新了库,添加了许多新功能或者解决...

2016-03-14 17:25:30 395

原创 处理键盘升起后对界面覆盖问题的处理

本人业余时间封装的工具类,供大家一起学习交流!!!

2016-01-31 12:18:22 796

原创 IPhone设备信息获取与网络状态监测

纯属业余研究,与各位iOS开发者一起学习交流一下。

2015-11-16 16:06:27 917

原创 iOS回调函数(block篇)

此文简单的介绍了block的回调传值使用,供大家一起交流学习。

2015-11-05 13:45:31 2832

原创 如何将一个uiview推送到窗口的前面与背后

UIview的层次管理简单的分析,供大家一起参考学习!

2015-10-23 10:46:13 293

原创 Quartz2D使用之基本图形绘制(一)

Quartz2D的基本概念与基本使用,供初学者一起学习

2015-10-22 09:28:05 429

原创 runtime实现原理

本文简单叙述了runtime的实现原理,供初学者一起学习!

2015-10-21 14:46:27 1821

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除