- 博客(21)
- 资源 (17)
- 收藏
- 关注
原创 iOS面试题与核心基础之安装包瘦身
安装包(IPA)主要由可执行文件、资源组成资源(图片、音频、视频等)采取无损压缩去除没有用到的资源:https://github.com/tinymind/LSUnusedResources可执行文件瘦身编译器优化Strip Linked Product、Make Strings Read-Only、Symbols Hidden by Default设置为YES去掉异常支持,Enable C++ Exceptions、Enable Objective-C Exceptio
2022-04-09 11:28:24
2435
原创 iOS面试题与核心基础之性能优化
屏幕显示过程中CPU和GPU所做的事情CPU对象的创建和销毁对象属性的调整布局计算文本的计算和排版图片的格式转换和解码图像的绘制(Core Graphics)GPU纹理渲染卡顿产生的原因CPU计算时间和GPU渲染一帧的时间超过屏幕刷新间隔时间(60分之一秒)如何优化针对CPU尽量用轻量级的对象,比如用不到事件处理的地方,可以考虑使用CALayer取代UIView(Swift则多使用结构体)不要频繁地调用UIView的相关属性,比如frame、bounds
2022-04-09 11:06:01
2295
原创 iOS面试与核心基础之启动优化
App启动类型APP的启动可以分为2种冷启动(Cold Launch):从零开始启动APP冷启动是指, App 点击启动前,它的进程不在系统里,需要系统新创建一个进程分配给它启动的情况。这是一次完整的启动过程。热启动(Warm Launch):APP已经在内存中,在后台存活着,再次点击图标启动APPApp 在冷启动后用户将 App 退后台,在 App 的进程还在系统里的情况下,用户重新启动进入 App 的过程,这个过程做的事情非常少。启动过程第一种划分方式启动过程可以分为三个阶段
2022-04-09 11:00:45
2768
原创 iOS面试题与核心基础之load&initialize
知识点loadXcode compile sources 列表越往后的参与编译越晚调用时机:+load方法会在runtime加载类、分类时调用调用特点:每个类、分类的+load,在程序运行过程中只调用一次通过函数指针分开直接调用,每个+load都会调用调用顺序:先调用类的+load按照编译先后顺序调用(先编译,先调用)调用子类的+load之前会先调用父类的+load再调用分类的+load按照编译先后顺序调用(先编译,先调用)+load方法是根据方法地址直接
2022-04-07 17:55:12
524
原创 iOS面试题与核心基础之KVC&KVO
KVOKVO是Key-value observing,俗称键值监听(键值观察),可以用于监听某个属性值的改变。当我们在调用 addObserver:forKeyPath时,系统会在运行时动态创建NSKVONotifying_A类,同时将原来的类指针指向新创建的类。新创建的NSKVONotifying_A类是原来类的子类,目的是重写setter方法,新的setter加入了通知所有观察对象的代码。当修改instance对象的属性时,会调用Foundation的_NSSetXXXValueAndNotify
2022-04-07 02:09:14
418
原创 iOS多线程系列之四:NSOperation以及多线程技术比较
本文导读:NSOperation作为苹果推荐的重要并发技术之一,在开发当中也较为常用。本文将详细介绍NSOperation两个子类以及NSOperationQueue的使用。而笔者前面的文章[iOS多线程基础][1]已经详细介绍了简单的多线程NSThread和基于C语言的功能强大的GCD,有需要的同学可以去看一下。既然有三种多线程技术,那它们又有什么区别呢?使用场景怎样呢?笔者将在本文末尾为大家一一解答NSOperation是苹果推荐使用的并发技术,它提供了一些用GCD不是很好实现的功能。NSOper.
2020-05-25 10:13:45
225
原创 iOS多线程系列之三:GCD用法大全
##一、GCD简介GCD(Grand Central Dispatch) 伟大的中央调度系统,是苹果为多核并行运算提出的C语言并发技术框架。GCD会自动利用更多的CPU内核;会自动管理线程的生命周期(创建线程,调度任务,销毁线程等);程序员只需要告诉 GCD 想要如何执行什么任务,不需要编写任何线程管理代码一些专业术语dispatch :派遣/调度 queue:队列 用来存放任务的先进先出(FIFO)的容器sync:同步 只是在当前线程中执行任务,不具备开启新线程
2020-05-25 10:12:42
3402
原创 iOS多线程系列之二: NSThread
第二部分 NSThread先看一段API文档的描述An NSThread object controls a thread of execution. Use this class when you want to have an Objective-C method run in its own thread of execution. Threads are especially useful when you need to perform a lengthy task, but don’t wa
2020-05-25 10:11:36
411
原创 iOS多线程系列之一:多线程基础
#第一部分 多线程基础##一、线程的基本概念###1.多线程出现的背景在计算机编程中,一个基本的概念就是同时对多个任务加以控制。许多程序设计问题都要求程序能够停下手头的工作,改为处理其他一些问题,再返回主进程。可以通过多种途径达到这个目的。多线程是为了同步完成多项任务,不是为了提高运行效率,而是为了通过提高资源使用效率来提高系统总体的效率。线程是在同一时间需要完成多项任务的时候执行的。###2.进程进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度..
2020-05-25 10:10:37
262
原创 CHCR让iOS布局更婀娜
传统方式布局的弊端两个label同一行布局的时候,传统做法是将其中的一个label的宽度固定;另外一个label设置左右约束,让它跟随屏幕宽度拉伸压缩。如下的例子,我给商品数量Label加了一个60宽度约束。然后,我们先来看看这样做的问题极端情况,当商品数量很大时就显示不下了。商品名称很长时,商品数量的剩余宽度显得有些浪费空间(浪费的程度要看具体的商品数量最大与最小的差值)如何解决要解决这两个问题就需要让两个Label的宽度在一定程度上自动调整。那这个调整到底是怎样一个程度呢?首先,
2020-05-25 10:09:08
534
原创 图解iOS签名机制
本文假定你已经熟练掌握了iOS创建证书,发布app以及真机调试信息传输如何防止被窃听?怎么加密?对称加密加解密同一密钥,速度快,但无法解决密钥共享问题非对称加密用于加密的密钥(公钥)可以公开解决了密钥共享问题,加密速度慢。所以使用混合密码混合密码的问题接收者的公钥是公开的,任何人都可以向接受者发消息,会衍生以下问题消息被篡改伪装发送者发送者否认发送消息如何解决?数字签名注意:公钥和私钥是成对的,它们互相解密,加解密可以反过来;可以被公开的那个叫 公钥 。.
2020-05-25 10:07:47
277
原创 解决shell脚本遍历带空格的文件/文件夹名
在做iOS Flutter依赖引入的时候,需要去遍历Pods 工程中的文件,而这个工程下刚好有一个名称带空格的文件夹。如下:如下的脚本会出问题:#!/bin/bashfunction doSomething(){ for element in `ls $1` do dir_or_file=$1"/"$element if [ -d $dir_or_file ];then doSomething $dir_or_file
2020-05-25 10:05:05
4854
1
原创 iOS拦截H5的input标签,实现图片处理
HTML的input标签在 type = "file" 时,即变为文件上传控件,浏览器会去监听这个标签,根据标签的另外一个 accept 字段的内容去调取各个平台的相关系统资源,如图片,视频,声音等,iOS也不例外。通过这个标签,移动端的H5页面就有直接获取系统资源的能力。但是有时候我们并不想让H5拿到原始的文件,或者是希望能够加工一下。比如:文件的压缩,文件格式转换,文件的编辑等。<form> <input type="file" accept="image
2020-05-25 10:01:09
3075
1
原创 iOS多语言漫谈(含自动化迁移旧项目)
目录概览各种资源的国际化1.文本2.图片3.nib4.其他资源特定模块/功能的国际化1.APP图标2.应用名与权限提示3.启动图(LaunchScreen)4.app调系统资源页面的国际化5.涉及服务端数据内容的国际化app内更改语言1.更改语言的方案2.未做国际化的旧项目迁移概览国际化的本质是为每种语言单独提供一份资源(文本,图片,音视频等)。本文术语本地化:指单独一种语言国际化:多种语言的合体在工程的Localizations中每新增一种语言,xcode会
2020-05-25 10:00:26
1248
原创 Flutter iOS 混合工程自动化
问题Flutter提供的混编方案直接依赖于Flutter工程和Flutter环境,非Flutte团队成员无法脱离Flutter环境进行开发,团队合作成本加重。期望Flutter默认的混编方式:不光依赖于flutter工程中的flutter产物,还依赖于flutter SDK中的xcode_backend.sh脚本。我们希望能够做到当项目混编的时候,没有开发flutter的团队成员能够完全脱离flutter,不需要flutter项目代码和安装flutter环境;而写flutter的团队成员能够按照原有.
2020-05-25 09:56:13
1683
翻译 Flutter是如何转换成iOS应用程序包的?
本文翻译自:Flutter’s iOS Application Bundle本文档描述了Flutter的构建系统如何将您的Flutter项目(及其资产)转换为iOS应用程序包。我希望能描述清楚一些构建步骤,并解释生成相应产物的目的(PS:这里的产物我觉得可以理解为构建时生成的一些中间文件或者最终生成的可执行文件等),这样您就可以将相同的过程集成到你自己的构建环境中。关于工作流程的注意事项:在构建要发布的应用程序时,您可能会使用Flutter工具,这会使构建过程容易一些。但是,一些开发人员可能会发现这个过
2020-05-25 09:55:02
1671
原创 Flutter试用报告
目录一、Flutter 为何使用Dart开发语言二、Flutter的UI系统1.特点2.架构简介2.1 Flutter Engine2.2 Framework(Dart)3.Flutter如何通过widget构建UI4.Flutter是响应式的框架,但是推崇能不变就不变5.庞大的widget体系,带来方便的同时也带来了高昂的学习成本6.套娃UI代码,揭开一层还有一层,喝完这杯还有三杯7.优秀的跨平台UI框架必须要有优秀的UI调试工具三、Flutter与Native的交融1.混编依.
2020-05-25 09:52:24
842
MFC C++6.0 socket通信+ACESS数据库
2013-11-30
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人