
iOS-开发小贴士
Haley_Wong
做一颗闪亮的哈雷彗星,照耀自己的小星系。
展开
-
iOS 应用提交到iTunes Connect,显示"正在处理"后消失不见
打包上传iTunes Connect 成功后,进入iTunes Connect 会看到如下的构建信息: 可是,过一会再刷新该页面,构建的版本就消失了。出现如上所述的情况,主要目前已知的有两种原因: 1、支持iOS 10及以后的应用,使用到一些权限,必须在plist文件中添加对应的key,以及描述信息。 2、应用中使用到了一些私有API(包括第三方库中使用到私有API)。以上两种情况,一般情原创 2016-11-08 11:23:23 · 6651 阅读 · 1 评论 -
iOS block简介
Block 是iOS 4 才引入的C语言扩充功能。block是什么?block 就是带有自动变量(就是局部变量)值的匿名函数。顾名思义就是带有自动变量(也就是局部变量)值的不带名称的函数。自动变量值是啥意思呢?先回顾下C语言中的函数里可能使用的变量类型:自动变量(局部变量)函数的参数静态变量(静态局部变量)静态全局变量全局变量其中,在函数的多次调用之间能够传递值的变量有:...原创 2019-02-16 15:59:07 · 2161 阅读 · 0 评论 -
iOS 实时获取当前应用消耗的CPU和内存
https://www.cnblogs.com/mobilefeng/p/4977783.html 这一遍文章对获取app 消耗的CPU和内存问题的多种方案做了对比,没有实际去测试。1 获取应用消耗的CPUfloat cpu_usage(){ kern_return_t kr; task_info_data_t tinfo; mach_msg_type_number_t转载 2017-12-01 16:01:19 · 20486 阅读 · 0 评论 -
iOS 中获取某个视图的截图
最近在做SDK的截图,想触发类似系统的截屏功能,找了一圈,总结一下靠谱的几种方式。 我写了个UIView 的category,将这几种方式封装和简化了一下。第一种情形截图这种是最最普通的截图,针对一般的视图上添加视图的情况,基本都可以使用。 源码:/** 普通的截图 该API仅可以在未使用layer和OpenGL渲染的视图上使用 @return 截取的图片 */- (UIImage *)转载 2017-11-28 19:56:28 · 9956 阅读 · 2 评论 -
如何让 Xcode 在读写上提速100倍?
文章转载自:http://www.jianshu.com/p/5861beb5bb75上个月参加了一场西雅图当地的线下 iOS 开发者聚会。Jeff Szuhay 作为一个有20+年开发经验的资深程序员,跟我讲了一套提高 iOS 开发效率的方法。相比于其他程序员在 App 启动时间、架构优化方面的经验,老爷子 Jeff 的优化基于硬件层面,匠心独运,极客风十足。以下是他的经验分享和我个人的实测。问题转载 2017-04-24 10:46:34 · 889 阅读 · 0 评论 -
atomic 和 nonatomic 有什么区别?
文章转载自:http://www.jianshu.com/p/7288eacbb1a2问题在定义 property 的时候,atomic 和 nonatomic 有何区别?转载 2017-04-05 17:38:57 · 2661 阅读 · 0 评论 -
iOS中的颜色
最近在改Bug的时候,才注意到iOS 中的颜色竟然也大有文章,特来记录一下。先说一下问题,因为某界面中有用xib实现的一个view,而这个view 只在UIColletionView的layout 里通过nib 注册使用,为这个xib设置了背景色,然后Cell也设置了背景色(用RGBA的API代码设置的颜色),这两个颜色值一样,但是实际显示出来颜色就是不一样。如下图所示 xib中的RGBA颜色从上原创 2017-01-09 10:33:50 · 3594 阅读 · 0 评论 -
iOS关于时间的处理
转自:iOS关于时间的处理做App避免不了要和时间打交道,关于时间的处理,里面有不少门道,远不是一行API调用,获取当前系统时间这么简单。我们需要了解与时间相关的各种API之间的差别,再因场景而异去设计相应的机制。时间的形式在开始深入讨论之前,我们需要确信一个前提:时间是线性的。即任意一个时刻,这个地球上只有一个绝对时间值存在,只不过因为时区或者文化的差异,处于同一时空的我们对同一时间的表述或者理解转载 2016-12-16 09:51:09 · 3513 阅读 · 0 评论 -
Xcode 调试技巧 --常用命令和断点
Xcode 中的调试技巧与我们的日常开发息息相关,而这些调试技巧在我们解决Bug时,常常有事半功倍的作用,经常会用到的有各种断点 和 命令。而这些调试技巧也经常会在面试中问到,所以不知道的就来看看吧。 调试命令在上图中,右侧绿色区域就是Log 输出区,在 Log 输出区可以使用一些命令,来辅助调试。 那有哪些调试命令呢? 想要看所有的调试命令,可以在上图的右侧区域输入help,就会列出所有的调原创 2016-12-12 17:39:15 · 6373 阅读 · 1 评论 -
iOS 中隐藏UITableView最后一条分隔线
最近在做弹出菜单的时候,使用到了FTPopOverMenu,遇到了箭头向下时,最后一根分割线十分不美观的问题。 由于这种菜单一般是不能滚动的,即设置了UITableView的滚动属性为NO。 我想了一种方法,是在最后一根分割线上添加一个视图,将其盖住。原创 2016-11-18 11:14:44 · 8142 阅读 · 0 评论 -
iOS应用启动时间
转自:iOS 知识小集 如果我们想知道程序启动的时间,则可以在工程的scheme中添加环境变量DYLD_PRINT_STATISTICS,如图1所示。这样在调试时,可以在控制台打印出程序启动过程中各个阶段所消耗的时间。我们运行程序就可以看到应用的启动时间,每个阶段的耗时。转载 2016-11-12 00:09:30 · 2487 阅读 · 0 评论 -
iOS 中捕获截屏操作
转自:iOS知识小集在iOS 7后,苹果提供了UIApplicationUserDidTakeScreenshotNotification通知来告诉App用户做了截屏操作。转载 2016-11-12 13:55:26 · 3383 阅读 · 0 评论 -
iOS中的NSURLProtocol
转自:iOS知识小集NSURLProtocol类(注意,这个不是协议)经常用于实现一些URL Loading System相关的黑魔法。它可以拦截URL Loading System相关的网络请求,如UIWebView,NSURLSession、MPMoviePlayer等,以自定义一些操作,如自定义网络请求的响应、缓存、重定向网络请求(将域名重定向到IP地址)等。转载 2016-11-12 12:42:23 · 849 阅读 · 0 评论 -
iOS 中的block异常
转自:iOS 知识小集我们在调用block时,如果这个block为nil,则程序会崩溃,报类似于EXC_BAD_ACCESS(code=1, address=0xc)异常【32位下的结果,如果是64位,则address=0x10】。如图1,这个异常表示程序在试图读取内存地址0xc的信息时出错。在定义一个block时,编译器会在栈上创建一个结构体,类似于图2的结构体。转载 2016-11-12 12:14:30 · 7065 阅读 · 0 评论 -
iOS 中的类属性
转自:iOS 知识小集从Xcode 8开始,LLVM已经支持Objective-C显式声明类属性了,这是为了与Swift中的类属性互操作而引入的。在WWDC 2016 What’s New in LLVM 网页链接 里面有如图1这样一段话。创建一个类属性很简单,主要有以下几个步骤: 1. 使用@property (class)来声明一个类属性; 2. 为类属性创建一个存储变量,通常为全局变量;转载 2016-11-12 12:08:18 · 10054 阅读 · 5 评论 -
iOS遍历数组的同时删除元素
我们在遍历可变数组时,最好不要做删除数组中元素的操作。 因为删除操作可能会引起数组容量的变化,导致数组越界等问题。 以前在使用for循环遍历的时候遇到过这个问题。 当时的做法是使用enumerateObjectsUsingBlock: ,但是这次又遇到这个问题时,顺便好好的测试了一下 for、for in、enumerateObjectsUsingBlock:。 实验结果如下:原创 2016-11-11 23:23:28 · 28130 阅读 · 0 评论 -
Xcode 中的断言
在Xcode 4.2以后,在release版本中断言是默认关闭的,这是由宏NS_BLOCK_ASSERTIONS来处理的。也就是说,当运行release版本时,所有的断言调用都是无效的。如果想在release环境下打开断言(当然你一定不想这么做的),则可以在PROJECT的Build Settings中,修改Enable Foundation Assertions的配置,如下图所示:转载 2016-11-11 22:14:37 · 2002 阅读 · 0 评论 -
# iOS中的KVO底层实现
KVO是Key-Value-Observer的缩写,使用的是观察者模式。底层实现机制都是isa-swizzing,就是在底层调用object_setClass函数,将对象的isa指向的Class偷偷换掉。而观察者模式就是 目标对象(被观察的对象)管理所有依赖于它的观察者对象,并在它自身的状态改变时主动通知观察者对象。而主动通知观察者对象这个实现一般都是调用观察者对象提供的接口。这样就可以将目标对...原创 2019-03-25 18:11:35 · 429 阅读 · 0 评论