- 博客(121)
- 收藏
- 关注
原创 常见的异常崩溃二
1、越界问题,包括数组越界(objectAtIndex:)、字符串越界(characterAtIndex:);异常显示:NSRangeException: -[__NSArrayI objectAtIndex:]: index 10 beyond bounds [0 .. 9]';方案:在根据下标取值时,先进行边界检查判断,如果没有越界方可取值。2、数据集合类型,如字典、数组中插入空n...
2018-10-10 11:15:48
646
原创 常见的线上异常崩溃一
一.UITableView reloadData的崩溃:[tableView reloadData]后当需要立即获取tableview的cell、高度,或者需要滚动tableview,那么直接在reloadData后执行代码是会有问题的。(如 在项目中用到scrollToRowAtIndexPath,但程序一旦调用scrollToRowAtIndexPath就出错,经分析是数据源和tablev...
2018-10-10 11:14:29
720
原创 ios 获取当前准确时间
获取当前时间:(之前做倒计时时发现一些bug,这里对获取当前时间进行总结)启动app时发送服务器时间请求获取当前最新时间,存储到内存;退到后台或锁屏手机后再进入前台情况下最新时间:这里处理的方案是将(启动app时获取到的服务器时间 - 当时获取服务器时间时处系统运行时长 + 现在的系统运行时长)这里只要能得到系统运行时长即可:了解下ios关于时间的处理:1.NSDate对象...
2018-10-10 11:12:38
3665
转载 iOS 崩溃日志 Backtrace的符号化
iOS的崩溃日志配合dsym文件可以找到崩溃时的backtrace,这是解决崩溃的最重要的信息.如果是在同一台mac上打包, 导入crash log时候会自动将backtrace符号化,可以看到方法名, 文件名和行号但是,有时候发版的包不是在你的mac上打包的,xcode找不到对应的符号表, backtrace没能符号化如下所示:Last Exception B
2017-04-13 18:39:15
1497
原创 添加多个UIWindow时,使用keyWindow要注意一点
最近的项目里有个关于创建多个uiwindow时使用keywindow出现的bug。有个任务是在打开信息展示时,要求不被任何东西遮挡。这里设计方案是添加一个新的HXUIWindow继承与UIWindow。测试时打开了HXUIWindow显示在屏幕上,执行打开 弹框 按钮(uiactionsheet或uialerview),当弹框消失后,再执行向主页最外层添加一个view,这个时候应该会想到用[[
2017-04-06 09:16:22
10976
转载 iOS 简单理解类的本质
1.类也是个对象类是一个对象是Class类型的对象简称类对象Class类型的定义// 一个任意的类型,表示一个Objective-C类typedef struct objc_class *Class;类名就代表着类对象,每个类只有一个类对象 获取类对象 // 获取类对象两种方式person1 和 person2 Class person1 =
2017-03-24 14:12:52
533
转载 类的本质-类对象
1.本质类的本质其实也是一个对象(类对象)程序中第一次使用该类的时候被创建,在整个程序中只有一份。此后每次使用都是这个类对象,它在程序运行时一直存在。类对象是一种数据结构,存储类的基本信息:类大小,类名称,类的版本,继承层次,以及消息与函数的映射表等类对象代表类,Class类型,对象方法属于类对象如果消息的接收者是类名,则类名代表类对象所有类的实例都由类对象生成,类对象会把实例的isa的值
2017-03-24 14:07:53
700
转载 理解“类对象”的用意
第14条:理解“类对象”的用意Objective-C实际上是一门极其动态的语言。第11条讲解了运行期系统如何查找并调用某方法的实现代码,第12条则讲述了消息转发的原理:如果类无法立即响应某个选择子,那么就会启动消息转发流程。然而,消息的接收者究竟是何物?是对象本身吗?运行期系统如何知道某个对象的类型呢?对象类型并非在编译期就绑定好了,而是要在运行期查找。而且,还有个特殊的类型叫做id,它能
2017-03-24 14:06:32
494
转载 Cobub文档
Cobub Razor是一款开源的移动应用统计分析系统,您可以把它搭建在您自己的服务器上,收集并展现来自您的移动App(包括iOS,Android和Windows Phone)的相关用户行为数据。Cobub Toaster是一个独立部署的移动应用推送解决方案。Cobub Razor是一个免费开源的移动应用分析系统。用户可以自己建立服务收集移动应用的相关数据,分析并生成统
2017-03-10 16:55:01
778
转载 CFBundleURLType 与 LSApplicationQueriesSchemes 的区别
CFBundleURLType:当前APP的scheme记录, 通过schema可在其它App中打开当前AppLSApplicationQueriesSchemes是从iOS9时被引入的。用意:当前APP允许访问的APP有哪些,即白名单,需要通信双方 均设置为对方的scheme,否则当调用对方App时,系统会告诉你This app is not allowed to query
2017-03-10 16:52:07
2739
转载 sizeof()解析
最近发现,许多公司笔试题都有考查sizeof()的用法,所以借此机会,自己学习一下,做以总结。sizeof是运算符,可用于任何变量名、类型名或常量值,当用于变量名(不是数组名)或常量时,它不需要用圆括号。sizeof有两种用法:(1)sizeof(object)或sizeof object 也就是对对象使用sizeof(2)sizeof(typename)
2017-03-10 16:51:22
1016
转载 APP提交审核时,这些坑你本可以直接避免
在APP提交app store审核时,以下这些坑你是可以直接避免的。蝉大师在知乎整理出在APP提交审核时要注意的事情,让自身应用顺利上线。 1.软件名字冲突。提交时发现有软件名字一样。丫停的。只能换。想好软件名字搜一下先。2.等级评定,娱乐相关所以不要你勾选后发现4+可以。然并乱。必须17+走起3.支付上,要求用户即使换手机或卸载软件,所购买的物品还可以继续使用。
2017-03-10 16:48:39
1670
转载 NSString 剪切一个字符串 deleteCharactersInRange
NSMutableString 为可变的字符串 NSString 为不可变的字符串- (void)viewDidLoad{ NSMutableString *a = [[NSMutableString alloc] initWithString:@"123456798"]; NSLog(@" \n a:
2017-01-06 16:42:16
1366
转载 oc消息转发机制
Class 类型对象OC本身是一种强类型语言,但其运行时功能让它又有了动态语言的特点。OC中对象的类型和对象所执行的方法都是在运行时阶段进行查找并确认的,这种机制被称为动态绑定。想要弄清楚运行时如何能够实现动态绑定机制,首先要了解OC中对象的本质。OC是C语言的超集,所以OC中面向对象的功能在底层也是使用C语言来实现。我们在OC中使用的对象,通常指的是储存该对象内存地址的一个指针变
2017-01-05 16:52:59
477
转载 尾调用优化
一、什么是尾调用?尾调用的概念非常简单,一句话就能说清楚,就是指某个函数的最后一步是调用另一个函数。function f(x){ return g(x);}上面代码中,函数f的最后一步是调用函数g,这就叫尾调用。以下两种情况,都不属于尾调用。// 情况一function f(x){ let y = g(x); return y;}
2016-12-29 15:27:40
480
转载 重载hash与isEqual:方法
前言NSObject 自带了hash与isEqual:方法,服务于具有hash表结构的数据结构。NSObject自带的hash函数相当于hash表中的f(key)函数中的key,这“唯一”的key需要用户自己产生,至于用什么算法由用户自己决定。 准备//// Model.h// Hash//// Created by YouXianMing on
2016-12-29 11:02:37
727
转载 [Objective-C]关联(objc_setAssociatedObject、objc_getAssociatedObject、objc_removeAssociatedObjects)
关联 关联是指把两个对象相互关联起来,使得其中的一个对象作为另外一个对象的一部分。 关联特性只有在Mac OS X V10.6以及以后的版本上才是可用的。在类的定义之外为类增加额外的存储空间 使用关联,我们可以不用修改类的定义而为其对象增加存储空间。这在我们无法访问到类的源码的时候或者是考虑到二进制兼容性的时候是非常有用。 关联是基于关键字的,因此,我们
2016-12-28 11:27:44
333
转载 iOS开发 之 不要告诉我你真的懂isEqual与hash!
为什么要有isEqual方法?isEqual方法的作用大家肯定是知道的:判断两个对象是否相等但是判断相等不是已经有==运算符了么, 为什么还要isEqual方法?这是因为:对于基本类型, ==运算符比较的是值; 对于对象类型, ==运算符比较的是对象的地址(即是否为同一对象)注意: 上述==运算符的说明适用于Objective-C和Java等不支持运算符重载
2016-12-26 14:21:54
3120
转载 __NSTaggedPointerString 转码问题
__NSTaggedPointerString这个类型是标签指针字符串,这是苹果在 64 位环境下对 NSString,NSNumber 等对象做的一些优化。简单来讲可以理解为把指针指向的内容直接放在了指针变量的内存地址中,因为在 64 位环境下指针变量的大小达到了 8 位足以容纳一些长度较小的内容。于是使用了标签指针这种方式来优化数据的存储方式。从他的引用计数可以看出,这货也是一个释放不
2016-12-22 14:44:31
1727
转载 iOS 静态库,动态库与 Framework 浅析
静态库与动态库的区别首先来看什么是库,库(Library)说白了就是一段编译好的二进制代码,加上头文件就可以供别人使用。什么时候我们会用到库呢?一种情况是某些代码需要给别人使用,但是我们不希望别人看到源码,就需要以库的形式进行封装,只暴露出头文件。另外一种情况是,对于某些不会进行大的改动的代码,我们想减少编译的时间,就可以把它打包成库,因为库是已经编译好的二进制了,编译的时候只需要
2016-12-15 17:40:16
2894
转载 iOS开发——创建你自己的Framework
如果你想将你开发的控件与别人分享,一种方法是直接提供源代码文件。然而,这种方法并不是很优雅。它会暴露所有的实现细节,而这些实现你可能并不想开源出来。此外,开发者也可能并不想看到你的所有代码,因为他们可能仅仅希望将你的这份漂亮代码的一部分植入自己的应用中。另一种方法是将你的代码编译成静态库(library),让其他开发者添加到自己的项目中。然而,这需要你一并公布所有的公开的头文件,实在是非常
2016-12-15 16:43:34
468
转载 关于静态库、动态库的区别汇总
linux中静态库和动态库的区别一、不同库从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行。库分静态库和动态库两种。 1. 静态函数库 这类库的名字一般是libxxx.a;利用静态函数库编译成的文件比较大,因为整个 函数库的所有数据都会被整合进目标代码中,他的优点就显而易见了,即编译后的执行程序不需要外部的函数库支持,因为所有使用的函数都已经被编
2016-12-15 15:40:01
356
转载 Xcode中的 workspace, project, target, scheme
最近在做SDK兼容性测试发现一个问题,就是编译出来的SDK,在iOS8以下的系统中不能用。查了下,发现是编译设置错了,虽然我target设置的是支持iOS6以上的,但是工程设置的还是iOS8以上。xib文件编译的版本是根据project设置,而不是target,这个也是为什么在低于iOS8中不能用的原因。正好之前对SDK开发进行了工程拆分和重组,也使用了workspace,顺便也了解了些编译相关的
2016-12-09 15:59:51
389
转载 compile Sources 和 Copy Bundle Resources的区别
CopyBundle Resources 主要是一些资源文件会被打包的时候会被放入app中。我见过的内容有:xib文件,图片资源,xxxSDK.bundle,html文件,js文件。我曾经碰到一个问题就是我在模拟器和设备中调试的时候都可以运行hmtl和js文件。可是打包给客户发现js失效了,打开包内容发现少了js文件,最后在这里面手动添加进去之后,在打包才发现js进
2016-12-07 17:27:10
2915
转载 C语言中.h和.c文件解析(很精彩)
简单的说其实要理解C文件与头文件(即.h)有什么不同之处,首先需要弄明白编译器的工作过程,一般说来编译器会做以下几个过程: 1.预处理阶段 2.词法与语法分析阶段 3.编译阶段,首先编译成纯汇编语句,再将之汇编成跟CPU相关的二进制码,生成各个目标文件 (.obj文件) 4.连接阶段,将各个目标文件中的各段代码进行绝对地址定位,生成跟特定平台相关的可
2016-12-07 17:23:13
491
转载 xcode添加文件时的勾选解析
在开发iOS项目的时候需要导入第三方的库文件,但是通过Xcode导入第三方源文件的时候会提示一些信息,不知所以然。现在看到的文档都是针对Xcode3的,针对Xcode4的说明很少,现在分享出来。官方说明文档http://developer.apple.com/library/mac/#qa/qa1484/_index.htmlhttp://labs.ywlx.net/?p=
2016-12-07 15:05:03
1374
转载 关于Xcode导入文件夹的2种选择
第一种:勾选Create groups一、使用Create groups 我们在项目中可以手动添加一个groups(右键点击选择New Group),但是手动添加的groups实际上并不会存在于项目的目录中,被添加进groups中的文件仍在位于它原来所在的位置,但从外部引入进来的groups并不会如此。groups一旦被创建或添加,都是以黄色文件夹的形式存在的,当你想要使用文件夹中的某个类
2016-12-07 14:55:07
1091
转载 Xcode项目引入外部文件夹,不能引用问题
最近在处理一些工程时候,偶尔注意到,工程文件里面添加了一些新的样式图标。什么样子呢,先看图,赫赫。 工程中的蓝色文件夹和以前习惯的黄色文件夹是不是不太一样。今天简单总结一下Folder References and Groups 参考文件夹和分组1. Group 分组在xCode的工程中,右键New Group, 即可创建,也就是黄色的文件夹。工程中想要分类管理的文件,可以
2016-12-07 14:53:51
2400
转载 ScrollView 与 Autolayout
学 Autolayout,当涉及到 ScrollView 时,很多人面对满屏幕红色错误不知所措,为什么明明以前没问题的约束到了这儿就成了错误。比如下面这种情况:一个蓝色的 UIView,设其长宽约束分别为 210,200。上、左和右间距为 55。如此设置这个 View 的位置就被确定了。没有错误,没有警告。可同样的方法,到 UIScrollView 却有触目惊心的红
2016-12-06 15:40:50
396
转载 iOS中 @synthesize 和 @dynamic
在声明property属性后,有2种实现选择@synthesize编译器期间,让编译器自动生成getter/setter方法。当有自定义的存或取方法时,自定义会屏蔽自动生成该方法@dynamic告诉编译器,不自动生成getter/setter方法,避免编译期间产生警告然后由自己实现存取方法或存取方法在运行时动态创建绑定:主要使用在CoreDa
2016-12-05 14:25:09
342
转载 Core Data的理解
一、基础概念深入1.NSManagedObjectContext被管理数据上下文就像便笺簿当从数据持久层获取数据时,相当于把这些临时的数据拷贝写在便笺簿上,然后就可以随心所欲的修改这些值。通过上下文,可以对数据记录NSManagedObject进行添加删除更改,记录更改后支持撤销和重做。除非你保存这些数据变化,否则持久层的东西是不会变化。通常我们将
2016-12-01 09:55:56
354
转载 苹果退出有两种方式:exit(0);和abort();
现在有的人用着苹果手机却拿安卓手机的眼光来用,非要弄一个退出app的控件出来。苹果退出有两种方式:exit(0);和abort();exit和abort都是终止程序执行退出的处理函数,其中exit是正常退出,abort是异常退出,退出时会输出错误信息,然后再调用exit退出。用户体验来说,exit就像是程序崩溃了,直接退出程序。abort就像是点击了home键,有过渡动画,一般我们在使
2016-11-30 17:28:45
6362
转载 [Xcode 7.2]Xcode菜单栏之你不知道的那点事
本文调研Xcode的版本是 7.2,基本是探索了菜单的每一个按钮。虽然从xcode4一直用到了xcode7,但是一般都只是用了一些基础的功能,其实菜单的按钮并不都是没有用,而是很有用只是你不知道罢了。下面划了删除线的选项是太基础的选项可以忽略,标红的选项是需要注意的。Xcode - MenuFile:
2016-11-24 11:12:14
1792
转载 在Xcode中使用Git进行源码版本控制
在应用程序开发过程中,很重要的一部分工作就是如何进行源码的版本控制。当代码出现问题时,我们就需要将代码恢复到原先正常的版本。如果是多个人共同开发一个项目,那么代码的控制就会非常复杂。幸运的是,开发者不需要自己控制这些,因为有专门的软件来负责,叫做版本控制系统。版本控制系统,或者说修改控制系统,实际上是一种检测源文件的改变并将其保存留作以后参考使用的机制(软件)。此外,它还能记录其他有用信息
2016-11-23 11:40:48
482
转载 Xcode7中你一定要知道的炸裂调试神技
Xcode7中苹果为我们增加了两个重要的debug相关功能。了解之后觉得非常实用,介绍给大家。1.Address Sanitizer: 妈妈再也不用担心 EXC_BAD_ACCESS?EXC_BAD_ACCESS一直是很多开发者的噩梦,因为这个错误很不直观,出现后往往要花很长时间才能定位到错误。苹果这次带来了革命性的提升。在项目的Scheme中Diagnostics
2016-11-23 09:41:47
316
转载 coreData初步认识
coreData初步认识根据这片文档可以自己初步建立一个coreData,进行简单的数据的增删改查。1、新建工程,记得勾选Use Core Data2、建立好以后可以看到xxx.xcdatamodeld,在这里可以添加实体和实体的属性。需要注意的是:实体名字必须以大写开头。3、然后新建一个file,记得是NSManagedObject cubclas
2016-11-22 15:13:04
297
转载 Auto property synthesis will not synthesize property ‘delegate’;it will be implemented by its superc
1. Auto property synthesis will not synthesize property 'title'; it will be implemented by its superclass, use @dynamic to acknowledge intention 这是说编译器自动给属性delegate合成getter和setter的时候将会在它的父类上实现
2016-11-22 13:53:20
611
转载 在代码中使用Autolayout – intrinsicContentSize和Content Hugging Priority
我们继续来看在代码中使用Autolayout的话题。先说intrinsicContentSize,也就是控件的内置大小。比如UILabel,UIButton等控件,他们都有自己的内置大小。控件的内置大小往往是由控件本身的内容所决定的,比如一个UILabel的文字很长,那么该UILabel的内置大小自然会很长。控件的内置大小可以通过UIView的intrinsicContentSize属性来获取内置
2016-11-17 16:43:24
397
转载 自动适应cell的高度
1. 如何自动适应cell的高度在IOS的布局中,计算和适应cell的高度是个经典的问题, 在frame时代,我们都知道用sizeWithFont: 先计算出文字的高度,然后通过计算得出cell的高度,然后赋予heightForRow:。那在Autolayout时代如何计算cell的高度呢?因为sizeWithFont:方法已经不太实用了。其实Autolayout不但更简单,还可以
2016-11-17 16:29:46
647
转载 description方法
description基本概念1.NSLog(@"%@", objectA);这会自动调用objectA的description方法来输出ObjectA的描述信息.2.description方法默认返回对象的描述信息(默认实现是返回类名和对象的内存地址)3.description方法是基类NSObject 所带的方法,因为其默认实现是返回类名和对象的内存地址, 这样的话,使用N
2016-11-14 17:29:17
1325
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人