iOS
文章平均质量分 82
阿飞正传的阿飞
刘飞写字的地方
展开
-
iOS启动优化之——如何使用Xcode Log、App Launch、代码来计算启动时间 Launch Time
在iOS启动优化之——如何使用MetricKit 来计算启动时间 Launch Time ,我们提到,可以使用MetricKit 在Organizer中或者直接代码统计,那么还能用什么来统计呢?Xcode曾经提供了一些环境变量比如DYLD_PRINT_STATISTICS来提供时间统计(参考Xcode 动态库环境变量——不止DYLD_PRINT_STATISTICS),我们在Scheme的Run 环境变量中添加该参数,启动之后,Xcode会在log中打印如下内容:但是在iOS15之后,iOS 15 an原创 2022-07-12 16:26:15 · 3445 阅读 · 0 评论 -
iOS启动优化之——如何使用MetricKit 来计算启动时间 Launch Time
感兴趣的可以看下这篇博客,讲述的非常清楚iOS 性能优化:使用 MetricKit 2.0 收集数据MetricKit提供了非常方便的回调,接入的步骤只有两个:先看下注册的代码,我们新建一个类来监听MetricKit,然后实现MetricKit的回调然后在App启动后注册这样,iOS会每24小时呼起两个DidReceive回调,传递回来数据。当然,我们开发的时候不可能一直测试等待数据,所以XCode 提供了Debug功能,注意只有真机支持该Debug能力位置如下: Debug -> Simulate原创 2022-07-11 17:59:14 · 1250 阅读 · 0 评论 -
一个NSObject对象占内存多少? 如何计算出来?
在iOS的面试中,有一道经典的题目,NSObject对象占内存多少?很多人能回答个大概,但是对于内部的实现或者这道题的升级就有些含糊了,我们今天来升级下这道题目,然后基于此看下底层的源代码是如何实现的题目NSObject *obj = [[NSObject alloc] init];NSLog(@"class_getInstanceSize = %zd", class_getInstanceSize([NSObject class]));NSLog(@"malloc_size = %zd", mal原创 2021-05-20 18:35:15 · 299 阅读 · 0 评论 -
UIAppearance、UI_APPEARANCE_SELECTOR的使用
当我们封装第三方库的时候,我们通常会希望将Api设置的更灵活一些,以方便使用者进行定制,在这些自定义的需求里面,UI的定制又是一个比较大的需求。 苹果在设计UIKit的时候,也提供了一个Protocol用于定制,那就是UIAppearance。使用场景先看下UIAppearance的使用,试想一个场景,新建一个App,这个App的基础色是蓝色,NavigationBar都是蓝色背景,白色文字,同时所有页面的背景色都是浅灰色,文字默认的Font是宋体。如何实现这个需求呢?先说通常的做法,很多App会基于原创 2021-03-01 17:29:21 · 620 阅读 · 0 评论 -
block
其实使用block的时间也蛮久了,比如使用__block,weak防止循环引用,copy修饰等注意点也都知道,但是一直没有去看过官方的文档,仔细看下所有的点。今天就把官方文档撸一遍,深入了解下。使用场景苹果在介绍block的使用场景时,是这么说的: You use a block when you want to create units of work (that is, code segme原创 2017-06-13 15:59:59 · 368 阅读 · 0 评论 -
iOS Runtime 详解
什么是runtime依照苹果文档的说法,runtime是: The Objective-C language defers as many decisions as it can from compile time and link time to runtime. (尽量将决定放到运行的时候,而不是在编译和链接过程)如何理解这段话呢,我们首先要知道,一段代码从写完到最终执行的过程中发原创 2017-05-04 17:06:20 · 2076 阅读 · 0 评论 -
Method,SEL,IMP
这三个概念,虽然在平时的时候总是在用,但是最近写runtime的时候,又感觉有点糊涂,今天就把他们的关系搞清楚。Method先看下定义runtime.h/// An opaque type that represents a method in a class definition.代表类定义中一个方法的不透明类型typedef struct objc_method *Method;struct原创 2017-05-03 16:20:30 · 817 阅读 · 0 评论 -
KVC详解
综述关于正常访问或者修改一个对象的属性,都是通过getter和setter方法,但是Cocoa仍然提供了一个间接访问属性的方法:KVC(Key-Value Coding)。 只要对象支持NSKeyValueCoding协议,我们就可以通过KVC来间接访问或者修改属性和属性中的更深层的属性。KVC也是许多Cocoa技术的基础,比如:KVOCocoa bingdingsCore DataAppl原创 2017-04-18 18:02:49 · 870 阅读 · 0 评论 -
iOS 响应链 Responder Chain
EventiOS设备和用户的交互其实有很多种方式,包括触摸屏幕,摇晃设备,多媒体控制(音量等)等。当设备检测到这三种事件中的一种的时候,iOS就会捕获当前事件的时间和内容,然后发出消息,通知App发生了事件,这个就是Event。 Responder有了Event之后,系统需要找到能够处理这个event的对象,而能够处理event的对象,就是UIResponder.我们常用的UIApplicatio原创 2017-03-30 15:36:25 · 451 阅读 · 0 评论 -
Apple文档翻译之Event-Handing-Guide-for-iOS
About Events in iOS用户会使用很多的方式来操作他们的iOS设备,比如点击屏幕或者摇晃屏幕。当用户正在操作硬件或者向App传递信息时,iOS会获取时间和方式。你的App给用户的反馈越自然、越直接,用户就会越有兴趣。AT a GlanceEvent是当用户有动作时,(UIKit)向App发出的通知。在iOS中,有很多形式的event:多点触摸,滑动、多媒体控制。最后一个事件被熟知为远程原创 2017-03-30 15:35:52 · 812 阅读 · 0 评论 -
Apple文档翻译之UIResponder
UIResponder是回应和处理事件的抽象接口,UIResponder的实例,包括:UIApplication、UIViewController、UIView(包含UIWindow),组成了UIKit处理事件的核心。当事件发生时,UIKit会把事件派发给UIResponder去处理。有许多种事件,包括触摸、手势、遥控和点击事件。为了处理特定的事件,一个responder(响应)必须重写corres原创 2017-03-30 15:34:32 · 362 阅读 · 0 评论 -
XCode 8 Missing Push Notification Entitlement 解决
升级了XCode8之后一堆坑,提交appleStore审核,又收到邮件说证书不支持推送,纳尼???什么都没改啊。 Missing Push Notification Entitlement - Your app includes an API for Apple’s Push Notification service, but the aps-environment entitlement is原创 2016-11-07 20:59:43 · 4922 阅读 · 2 评论 -
React Native
React Native大家好,今天跟大家分享的主题是《从iOS到React Native》,接下来的内容主要分为四个方面:弄清几个概念:React、React Native及其原理写简单Demo: 跳转、UI、数据、生命周期推荐的入门路径目前的一些问题和困扰React 、React Native概念React现在app有很多新兴的概念,我们先把React Native的相关概念问题搞清楚原创 2016-10-24 14:58:07 · 851 阅读 · 0 评论 -
使用 UIViewAlertForUnsatisfiableConstraints 捕捉autolayout 约束冲突
很多时候我们会遇到约束冲突的问题、但是因为苹果只会在log中提示冲突、且这些冲突很难去理解、所以遇到冲突、也很难发现到底是哪里出了问题、但是苹果还是提供了方法、去debug的。 我们来看冲突的log:2015-08-26 14:29:32.870 Auto Layout Cookbook[10208:1918826] Unable to simultaneously satisfy constra原创 2016-02-24 10:25:51 · 14395 阅读 · 0 评论 -
@property详细解读
@property 这个关键字、学过iOS的一定会经常用、但是如果你问一个人、@property是干嘛用的? 可能就会有人一脸茫然地问你:”不就是声明属性用的么?” 。这话当然对、那么@property的背后的机制是什么?是如果声明属性?做了哪些事情呢?在讨论@property这个关键字之前、我们先说下iOS中、是如何声明变量的。iOS声明变量的方法在ARC下、生命变量有两种比较常用的方法:方法一:原创 2016-03-04 16:46:53 · 1235 阅读 · 0 评论 -
AutoLayout的起源、概念和基本知识
随着iOS的设备的尺寸的拓展、还有iphone 和 ipad 一个app的模式的流行、传统的fram 布局(即指定 x y width height)已经很难做到非常好的效果、所以关系形布局 Autolayout开始大展身手、受到越来越多开发者的青睐。Autolayout的目标和多种布局的比较目标苹果在官方的文档中,是这么形容autolayout的目标的“苹果设计autolayout主要是帮助开发者原创 2016-02-17 14:19:36 · 613 阅读 · 0 评论 -
NSAssert用法
什么是assertassert是断言、简单来讲、就是代码的作者认定这个条件一定要是能满足断言的条件、否则代码不满足最基本的条件也就不用再运行下去、防止错误的代码引起更深层的问题。if (条件成立){}else { 中断程序}NSAssert的定义如下#define NSAssert(condition, desc, ...) \ do { \原创 2016-03-03 14:43:34 · 1415 阅读 · 0 评论