自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

lixuezhi

共同交流 共同进步

  • 博客(64)
  • 资源 (1)
  • 收藏
  • 关注

原创 block详解

block是C语言的扩充,既像函数那样能够执行又像参数那样进行传递,是可以带自动变量的匿名函数。在OC中,block常常会造成会造成循环引用,我们要用__weak修饰符来打破循引用,达到正常释放的目的。一个小的知识点,block为什么会对其块内的对象进行强引用?因为系统或我们对block进行了copy操作。这些都不是本篇博客的中心,这篇博客主要来看下block的底层实现。 先来看下最简单bloc...

2018-08-20 11:59:33 1148

原创 __weak详解

object默认的修饰符是__strong,然而在开发中我们也经常使用__weak,用它来解决循环引用的问题:两个对象相互引用无法释放,造成内存泄露。用__weak来破坏一个强引用,来达到正常释放的目的。这种情况常见于block中,但是有没有想过为什么block会强引用block中的对象呢?答案也很简单,我们手动或者编译器帮我们对block进行了copy的操作,所以block会对其块中的对象就行强...

2018-08-19 17:46:31 12983

原创 autoreleasepool详解

随着ARC技术的使用,iOS的开发者在内存管理方面越来越方便,很多的事情已经不需要我们来操作,编译器已经帮我们做好了。即使是这样有些还是要了解的,以便我们犯一些低级的错误,造成内存泄露甚至崩溃,今天来说说autoreleasepool的那些事。 来看个常见的面试题:常常会问下面的代码有什么问题,怎么解决?如果你对autoreleasepool不了解的话就很难发现问题。for (int i...

2018-08-18 23:48:53 3643

原创 探究iOS分类(category)为什么不能直接添加属性

既然要探究的是分类,那么我们先看一下分类的定义//Category表示一个结构体指针的类型typedef struct objc_category *Category;struct objc_category { char * _Nonnull category_name OBJC2_UNAVAILABLE; ch...

2018-08-15 23:38:35 8447

原创 iOS黑魔法--NSArray的拦截

接上一篇的iOS黑魔法来看下NSArray的拦截方法。拦截的主要就是一些常用的方法,比如index访问越界,add remove操作等,笔者列出自己的封装,不过你也可以根据自己的需要添加更多的拦截方法。 首先要明白NSArray是用了类簇的方法隐藏了内部的实现细节,NSArray也只是一个抽象的基类,用NSArray创建的对象并不是NSArray对象,而是它所封装的实体子类。 OC中并不能指明...

2018-08-12 18:21:48 739

原创 iOS黑魔法-- Method Swizzle

Method Swizzle目前method swizzle已经用了很长时间了,从线上的表现来看,这是一个非常有必要的工具,可以很好的拦截一些脏数据或者我们的不慎造成的一些常见的崩溃,所以笔者记录分享一些这些方法。AOP首先我们先要抛开OOP(面向对象编程)的观念,从AOP(Aspect Oriented Programming,面向切面编程)的角度来封装一系列swizzle方法,以方...

2018-08-12 16:45:07 1017

原创 iOS-Jenkins脚本打包上传fir

这次jenkins打包先介绍一下脚本的方式,配置jenkins的方法后续在补上。这种脚本的方式比较简单,要不要jenkins都可以,因为jenkins做的也就是执行几句命令和直接在终端执行没什么区别。脚本涉及的工具:xcodebuildxcrunfir-cli 其中,xcodebuild和xcrun都是xcode自带的工具,如果没有可以通过下面命令安装,至于这两个工具中的各种命令在这里就不介

2017-08-11 14:28:57 1195

原创 ios runtime - 开篇

objc_msgSend最近在搞工程中的安全拦截措施,自然而然的要用到消息的转发机制,在这里就简单的叙述一下消息的转发机制为后续的工作做铺垫。 首先OC采用的是消息结构,而非函数调用。二者的区别在于消息结构的语言在运行时执行的代码直到运行时才确定;甚至连接收消息的对象编译器也不关心,也是在运行时确定,这个过程叫作动态绑定。而函数调用执行的代码有编译器决定,只有在函数是多态的时候才在运行时通过虚拟方

2017-08-04 17:12:51 328

原创 swift3.0 如何写一个类集使用的类方法协议

swift 3.0 开发中有这样一个需求:我要在父类定义一个协议,协议中的方法是类方法,并且能够让子类重载。想到这里感觉很简单的样子,然后就去实践。发现一些细节还是要注意的。我们都知道static和class修饰方法的区别,static修饰的类方法不能被子类重载,而class修饰的是可以的。所以首先想到的是这样写你会发现不能像以前一样在protocol中写class了,错误原因是cla

2016-12-08 10:53:37 1991

转载 iOS 10 的坑:新机首次安装 app,请求网络权限“是否允许使用数据”

原文链接地址:http://www.cocoachina.com/ios/20161206/18304.html这个坑最近弄得我很抓狂,不过现在基本弄清楚了。记录一下过程中我收集到的信息,分享给大家。症状iOS 10 之后,陆陆续续地有用户联系我们,说新机第一次安装、第一次启动的时候,app 首屏一片空白,完全没数据。kill 掉重新打开就好了。一开始以为是用户网络

2016-12-07 15:32:46 3131

原创 xcode 8.1: bundle format unrecognized, invalid, or unsuitable

由于使用swift的原因博主升级了xcode到8.1,担心的事情还是发生了,升级完成之后原来oc的工程编译出现错误:xcode 8.1: bundle format unrecognized, invalid, or unsuitable。意思是说bundle的格式无效,瞬间懵逼了。一直都能用的bundle怎么会格式错误呢?最后还是在stack overflow中找到了答案点击打开链接

2016-12-06 10:17:24 1507

原创 dyld: Library not loaded: @rpath/libswiftCore.dylib问题解决

今天博主遇到了这个问题,真机运行立刻就崩溃,模拟器没有问题。找了很多的博客来查这个问题,有的通过这些方法也解决了问题,但是我试了这些方法都没有作用,最后在Stack Overflow偶然发现一个方法才得以解决,下面我就汇总一下解决问题的方法,希望能帮助同样遇到这个问题的童鞋。一.clean xcode,把真机上的app删除,重新运行二.1. 退出 Xcode2. 重启电

2016-11-18 10:25:38 31845 1

原创 git中如何忽略project.xcworkspace/xcuserdata/username.xcuserdatad/userinterfacestate.xcuserstate文件

遇到这个问题首先要确定两件事情:一.你是否写了.gitignore文件。Git中有一个.gitignore配置文件,在这个文件中可以设置被忽略的文件,假如你在工程中写了一个小的脚本,只想自己使用而不用提交到远端进行管理,那你就可以在.gitignore文件中进行配置。我们一般只对某一个特定的工程进行一些文件的忽略,所以只需要在工程中的代码目录下添加这个文件即可。在你确定有这个文件并且加入了下面

2016-08-09 14:41:22 12822

原创 unable to dequeue a cell with identifier Identify - must register a nib or a class for the identifie

unable to dequeue a cell with identifier Identify - must register a nib or a class for the identify最近在友盟上看到了这样一个错误,它的意思就是你没有用identifier来注册一个nib或者一个类。为什么会报这样的错误呢?原因就是有两个方法没有弄明白// Used by the de

2016-04-12 09:54:39 840

原创 友盟,听云统计到的crash如何定位

我们在开发的过程中经常会用到一些统计工具来统计一些问题,如访问量,bug等,本文主要介绍我们发现有统计到bug的时候我们如何定位到我们的代码中;在平时的开发中我们可以通过调试台轻松的看到问题的所在,但是在友盟或者听云等统计平台上我们看到的仅仅是一些二进制数值,如何定位就成了我们解决bug的关键。能过定位bug主要是通过dSYM文件(debugging SYMbols)又称为调试符号表,每一次打包之...

2016-04-11 19:53:45 2379

原创 Constant is not finite! That's illegal. constant:nan

近日,在开发的过程中在友盟统计上看到了我们的app出现了Constant is not finite! That's illegal. constant:nan的崩溃,定位之后只看到了这样的代码:CGFloat percent = ceil((self.model.num1.floatValue / (self.model.num2.floatValue +self.pri

2016-04-11 14:27:07 10255 2

转载 iOS中的事件传递和响应者链条

首先我们来看看iOS中事件的产生和传递过程:1.发生触摸事件后,系统会将该事件加入到一个由UIApplication管理的队列事件中2.UIApplication会从事件队列中取出最前面的事件,并将事件分发下去以便处理,通常会先发送事件给应用程序的主窗口(keyWindow)3.主窗口会在视图层次结构中找到一个最合适的视图来处理触摸事件4.找到合适的视图控件后,就会

2016-03-15 20:06:45 385

转载 UIView常用的一些方法小记之setNeedsDisplay和setNeedsLayout

1,UIView的setNeedsDisplay和setNeedsLayout方法  首先两个方法都是异步执行的。而setNeedsDisplay会调用自动调用drawRect方法,这样可以拿到  UIGraphicsGetCurrentContext,就可以画画了。而setNeedsLayout会默认调用layoutSubViews, 就可以  处理子视图中的一些数据。综

2016-03-15 11:57:16 372

原创 xib绘制的cell中动态改变cell子视图的frame

xib绘制的cell动态改变其中子试图的frame,这个场景是我在cell中,用view自定义了一个进度条,根据数据不同改变进度条即view的长度。我开始是写在updateCellWithModel中(自定义方法),在这个方法中改变frame的大小,但是很多进度条都没有生效,上下滑动之后才显示出来,能与百分比数字对应起来;后来我写在了layoutSubview中,仍然不能解决问题;然后我想到了dr

2016-03-14 19:50:37 1098

原创 The identity used to sign the executable is no longer valid

出现这个问题的原意就是你的pp文件(provisioning profile)不对了。一般情况下我们会有开发和发布两种pp文件,有一种情况就是你把他们选错了,毕竟这是个少数原因;另外一个原因比较难以发现,就是你可能在project-->Build setting-->code sign中一直是automatic并未动过什么,突然就运行不了了。这种情况你就要问问你的小组成员,有没有改过pp文件。

2016-03-14 12:00:46 299

原创 iOS--自定义系统控件

我们在开发的过程中,系统的控件往往不能满足我们的需求,那么我们一般都会选择自定义控件。但是这样的话就必须实现控件的所有功能,如果我们能在系统控件的基础上改变我们想要的一些效果那就再好不过了。下面我就简单的介绍一下这种方法:比如说,小编在工作的过程中用到了IUITabBarViewController,但是UI的视觉需要修改tabBar的底部距离与tabBar的顶部的线的颜色。也许你会自定义一个

2016-03-11 19:08:06 583

转载 JSON 数据格式

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。JSON采用完全独立于语言的文本格式,这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成。基础结构JSON建构于两种结构: 1. “名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(o

2016-03-03 18:00:34 287

原创 Xcode升级插件失效 | 错误选择了Skip Bundle

在开始使用Xcode插件后,每当更新Xcode到最新的版本,新安装的Xcode的uuid会变更,导致使用旧uuid的插件无法使用。因此,我们需要重新配置插件plist里的uuid属性,然后重新编译插件工程文件。在这个过程中我们一般用到的terminal命令如下:查询Xcode的UUIDdefaults read /Applications/Xcode.app/Contents/

2016-01-26 14:25:27 431

原创 在images.xcassets中存放图片的优势

一、首先一点:用法和原来一样,用[UIImage imageNamed:]来加载图片;    而且图片更换名字的时候不用再代码中更换图片名字。比如说,在images.xcassets中开始有一张名为aaaa.png的图片,[UIImage imageNamed:@"aaaa"]    然后在images.xcassets中把这张图替换为bbbb.png的图片,代码是不用改的。二、不用再为多

2016-01-25 13:59:03 3493

转载 Objective C运行时(runtime)技术的几个要点总结

转至http://justsee.iteye.com/blog/2019541前言: Objective C的runtime技术功能非常强大,能够在运行时获取并修改类的各种信息,包括获取方法列表、属性列表、变量列表,修改方法、属性,增加方法,属性等等,本文对相关的几个要点做了一个小结。(1)在运行时对函数进行动态替换 : class_replaceMethod      使

2016-01-05 14:15:08 226

转载 ios打包ipa的四种实用方法(.app转.ipa)

总结一下,目前.app包转为.ipa包的方法有以下几种:1、Apple推荐的方式,即实用xcode的archive功能Xcode菜单栏->Product->Archive->三选一,一般选后两个。局限性:个人开发一般采用这种方法,但是当一个证书多人使用时就稍显麻烦。一般多人开发时都是采用provisioning profile+P12文件来进行真机调试。上述方法在最后导出i

2016-01-05 14:10:03 586

转载 iOS dSYM文件结构剖析(上)

摘要:在iOS App开发过程中,开发者会利用Xcode打包生成.xcarchive的包文件,并通过Organizer工具可以管理、导出发布文件。本文作者从本文开始,详细剖析了打包之后的dSYM文件的结构。CSDN移动将持续为您优选移动开发的精华内容,共同探讨移动开发的技术热点话题,涵盖移动应用、开发工具、移动游戏及引擎、智能硬件、物联网等方方面面。如果您想投稿、参与内容翻译工作,

2016-01-04 20:22:50 1203

原创 Reveal 一个让你开发事半功倍的工具

大家可以从Reveal的官方网站下载Reveal。然后,从iOS应用逆向工程下载破解版文件,破解方法按照里面的说明做就可以了;也可以直接找破解版的Reveal。使用方法,可以打开Reveal,点击Help -> Integration Guide,它会打开一个网页里面有详细的各种集成方法,如集成方法有Static Linking,  Dynamic Loading,   Cocoa

2016-01-04 17:02:51 786

转载 iOS 开发:用 Instruments 来检验你的app

编者注:或许很多人对 Instruments 应用不太了解,但可能很多老的 iOS 开发者都应该用过 Instruments 工具来检测iOS应用内存泄漏情况。特别是在iOS 5.0之前,即苹果在iOS平台上面还没支持ARC的时候,写iOS应用就类似C语言那样,容易忘记释放内存,而内存对移动设备而言是非常可贵的。入门为了节省大家的时间,提供一个演示的Demo给大家.代码传送门.

2015-12-31 16:12:45 367

转载 CALayer与UIView的关系

CALayer属于Core Animation部分的内容,比较重要而不太好理解。以下是园子中看到的一篇文章的摘录:1. UIView是iOS系统中界面元素的基础,所有的界面元素都是继承自它。它本身完全是由CoreAnimation来实现的。它真正的绘图部分,是由一个CALayer类来管理。UIView本身更像是一个CALayer的管理器,访问它的跟绘图和跟坐标有关的属性,例如frame,b

2015-12-30 10:29:36 280

转载 动态计算UITableViewCell高度详解

不知道大家有没有发现,在iOS APP开发过程中,UITableView是我们显示内容常见的控件,本人觉得它是UIKit中最复杂的一个控件。今天要向大家介绍的就是如何动态计算UITableViewCell高度的一经验与技巧,在此做一些总结方便朋友们查阅。为了不让讲解空洞抽象,我还是用代码实例的方式进行讲解,这样更容易接收与学习。 本文将介绍四种情况下UITableViewCell的

2015-12-29 11:43:06 223

转载 iOS SEL的简单总结

复制代码@interface Person : NSObject+ (void)test1;- (void)test2;@end    // 根据.h文件中定义的Person类和方法 执行完这行代码 在内存中如下    Person *person = [[Person alloc] init];复制代码SEL就是对方法的一种包装。包装的SEL类型数据它对应

2015-12-28 17:59:20 209

转载 正则表达式30分钟入门教程

本文目标30分钟内让你明白正则表达式是什么,并对它有一些基本的了解,让你可以在自己的程序或网页里使用它。如何使用本教程最重要的是——请给我30分钟,如果你没有使用正则表达式的经验,请不要试图在30秒内入门——除非你是超人 :)别被下面那些复杂的表达式吓倒,只要跟着我一步一步来,你会发现正则表达式其实并没有想像中的那么困难。当然,如果你看完了这篇教程之后,发现自己明白

2015-12-28 16:24:17 263

转载 一个正则表达式测试(只可输入中文、字母和数字)

一个正则表达式测试(只可输入中文、字母和数字)      在项目中碰到了正则表达式的运用,正则还是非常强大的,不管什么编程语言,基本上都可以用到。之前在用java时特别是对用户名或密码使用正则非常爽,写脚本上用正则也非常爽,可是到了OC这却把我虐了一把,可能是对OC掌握的不够。这里就罗列了从网上找的很有用的资料,感谢大神们的贡献。首先举一个例子:匹配9-15个由字母/数字组成的字符

2015-12-28 16:21:59 4296

原创 UIColor的16进制色值,16进制字符串扩展

@interface UIColor (Hex)/** *  16进制字符串转化为颜色 *  @param hexStr 16进制字符串支持@"0x..." @"0X..." @"#..." @"..." *  @return UIColor */+ (UIColor *)colorWithHexString:(NSString *)hexStr

2015-12-28 15:38:17 437

转载 UIApplication代理方法

UIApplication的核心作用是提供了iOS程序运行期间的控制和协作工作。每一个程序在运行期必须有且仅有一个UIApplication(或则其子类)的一个实例。回想一下我在前面的文章“main函数研究”的文章中提到的main函数的代码,可以看出,在程序开始运行的时候,UIApplicationMain函数是程序进入点,这个函数做了很多工作,其中一个重要的工作就是创建一个UIAppli

2015-12-21 20:22:00 310

转载 iOS开发多线程篇—线程间的通信

iOS开发多线程篇—线程间的通信 一、简单说明线程间通信:在1个进程中,线程往往不是孤立存在的,多个线程之间需要经常进行通信 线程间通信的体现1个线程传递数据给另1个线程在1个线程中执行完特定任务后,转到另1个线程继续执行任务 线程间通信常用方法- (void)performSelectorOnMainThread:(

2015-12-11 16:50:02 341

转载 iOS开发多线程篇—线程安全

iOS开发多线程篇—线程安全 一、多线程的安全隐患资源共享1块资源可能会被多个线程共享,也就是多个线程可能会访问同一块资源比如多个线程访问同一个对象、同一个变量、同一个文件当多个线程访问同一块资源时,很容易引发数据错乱和数据安全问题示例一:示例二:问题代码: 1 // 2 // YYViewCo

2015-12-11 16:26:06 342

转载 断言(ASSERT)的用法

我一直以为assert仅仅是个报错函数,事实上,它居然是个宏,并且作用并非“报错”。  在经过对其进行一定了解之后,对其作用及用法有了一定的了解,assert()的用法像是一种“契约式编程”,在我的理解中,其表达的意思就是,程序在我的假设条件下,能够正常良好的运作,其实就相当于一个if语句:if(假设成立){ 程序正常运行;}else{ 报错&&终止程序!(避

2015-12-10 21:02:42 1227

转载 友盟启动次数的统计原理是什么?

Android平台:在每个Activity的开始和结束时分别调用onResume和onPause方法. 当一个onResume方法与上一个Activity的onPause方法相差30秒,标志新session的开始;当一个onPause方法发生后30秒内没有再触发任何一个Activity的onResume方法,标志该session结束。如果应用Crash, Andro

2015-11-23 09:44:08 3720

PackageApplication

打包工具

2017-08-11

空空如也

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

TA关注的人

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