黄文臣
码龄8年
  • 2,034,235
    被访问
  • 302
    原创
  • 1,004,316
    排名
  • 2,184
    粉丝
  • 15
    铁粉
关注
提问 私信
  • 加入CSDN时间: 2014-08-10
博客简介:

Leo的专栏

博客描述:
Everything is an experiment, you win or learn~
查看详细资料
个人成就
  • 博客专家认证
  • 获得968次点赞
  • 内容获得396次评论
  • 获得479次收藏
  • GitHub 获得5,229Stars
创作历程
  • 1篇
    2020年
  • 2篇
    2019年
  • 13篇
    2018年
  • 21篇
    2017年
  • 36篇
    2016年
  • 142篇
    2015年
  • 87篇
    2014年
成就勋章
TA的专栏
  • iOS开发详解
    75篇
  • learning swift with hwc
    18篇
  • Swift实用技术
    14篇
  • 由浅至深学习Linux
    14篇
  • 校招面试
    2篇
  • Swift下的GCD详解
    5篇
  • iOS项目实战
    3篇
  • 自己的iOS库
    12篇
  • iOS进阶
    41篇
  • Swift
    23篇
  • React Native
    7篇
  • React
  • 数据持久化+CoreData
    16篇
  • iOS基础
    29篇
  • Swift入门教程(1.0)
    30篇
  • CoreAnimation
    16篇
  • Foundation
    14篇
  • UIKit
    23篇
  • iOS 网络编程
    7篇
  • iOS 多线程
    6篇
  • C++
    14篇
  • Linux
    17篇
  • 小技巧
    11篇
  • 综合
    11篇
  • 设计模式
    4篇
  • 吐槽
    2篇
  • iOS代码调试
    5篇
兴趣领域 设置
  • 移动开发
    flutterreact native
  • iOS
    xcodeswiftobjective-cswiftuicocoapodswwdcrxswift
个人信息
profile for Leo on Stack Exchange, a network of free, community-driven Q&A sites
  • 最近
  • 文章
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

性能深度分析之SystemTrace

前言App中大多数的性能指标都和时间相关,如启动速度,列表滑动FPS,页面打开耗时等等。为了优化这些指标,我们需要了解时间都消耗在哪里。通常我们会打开Time Profiler,通过聚合Call Stack来分析和优化代码耗时。偶尔会出现优化后Time Profiler已经没有什么高耗时的Call Stack,但列表滑动仍然掉帧,这时候应该怎么办呢?不妨试试System Trace~一个实...
原创
发布博客 2020.03.08 ·
4093 阅读 ·
5 点赞 ·
6 评论

深入理解Symbol

这里是引用前言符号(Symbol)是日常开发中经常接触的一个概念,虽然日常开发中直接应用的场景比较少,但符号编译期和运行时都扮演了重要的角色。符号是什么维基百科的定义A symbol in computer programming is a primitive data type whose instances have a unique human-readable form....
原创
发布博客 2019.11.30 ·
4942 阅读 ·
9 点赞 ·
1 评论

聊聊应用内购买

前言上一份工作中,断断续续开发和维护了两年左右的内购,换工作后短期内应该不会做相关业务了,所以趁着“记忆”还是热乎的,写下这篇文章。希望读者通过阅读本文能够解决一些问题或者找到一些产品灵感,本文主要包括三个方面:内购的基本概念;代码层面如何开发,坑和对应的解决方案;应用审核和后续运营的注意事项;友情提示:本文很长~授之以渔以下官方资料,建议开发内购的同学静下心来通读一遍,能避免...
原创
发布博客 2019.04.21 ·
16894 阅读 ·
35 点赞 ·
9 评论

深入浅出iOS编译

前言两年前曾经写过一篇关于编译的文章《iOS编译过程的原理和应用》,这篇文章介绍了iOS编译相关基础知识和简单应用,但也很有多问题都没有解释清楚:Clang和LLVM究竟是什么源文件到机器码的细节Linker做了哪些工作编译顺序如何确定头文件是什么?XCode是如何找到头文件的?Clang Module签名是什么?为什么要签名为了搞清楚这些问题,我们来挖掘下XCode编译iO...
原创
发布博客 2018.12.23 ·
18379 阅读 ·
26 点赞 ·
8 评论

iOS 性能优化 - TimeProfiler分析代码耗时

Time ProfilerTime Profiler用来分析代码的执行时间,主要用来分析CPU使用情况。注意:要在release模式(或者自定义的其他的打包模式)下分析,原因在release模式下:会开启编译器优化,提高代码运行效率生成调试的符号表,这样才能够在profile的时候看到代码的调用栈多数条件编译只会在debug模式下生效,release模式和生产环境是一样的。Dem...
原创
发布博客 2018.11.20 ·
6223 阅读 ·
3 点赞 ·
0 评论

iOS 性能优化 - Allocations分析内存分配

AllocationsAllocations用来分析静态内存分配。Demo项目Demo AppDemo是一个简单的图片应用:首页只有一个简单的入口;次级页面会读取本地页面,加滤镜,然后按照瀑布流的方式显示出来;第三个页面提供大图显示;运行代码:点击Photos -> 进入main -> 点击一张图,进入详情页 -> Pop直到回到第一个页面,重复这段操作,从XCode...
原创
发布博客 2018.10.21 ·
6344 阅读 ·
12 点赞 ·
1 评论

XCode 10打包上传后在iOS 9上Crash(2018)

问题描述:XCode 10打包的App在iOS 9上Crash。原因:App Store的Bug,上传后的代码经过App Store处理后,加载assets中的图在iOS 9上会Crash。解决方案:切回到XCode 9.4打包,前提是你没有用到一些iOS 12的新特性。弃用Assets,把里面的图(除了icon和launch image)拖拽到项目里,按照普通图片的方式使用。等待...
原创
发布博客 2018.09.28 ·
4698 阅读 ·
2 点赞 ·
4 评论

聊聊AppDelegate解耦

AppDelegate在iOS开发中,AppDelegate指的是UIApplicationDelegate,用来处理App层面的事件,包括生命周期变化,OpenURL,处理HandOff和Intent等。每个iOS都有一个入口函数main,其中的一个参数就是AppDelegate:int main(int argc, char *argv[]){ @autoreleasep...
原创
发布博客 2018.08.12 ·
26497 阅读 ·
5 点赞 ·
1 评论

实现一个优雅的iOS事件总线

目标订阅登录事件LoginEvent,当self dealloc时候自动取消订阅[QTSub(self, LoginEvent) next:^(LoginEvent *event) {}];订阅通知NSNotification,当self dealloc的时候自动取消订阅//订阅通知name[QTSubNoti(self,"name") next:^(NSNotifi...
原创
发布博客 2018.07.12 ·
6787 阅读 ·
6 点赞 ·
7 评论

深入理解iOS Crash Log

Crash LogCrash Log的主要来源有两种:Apple提供的,可以从用户设备中直接拷贝,或者从iTunes Connect(XCode)下载三方或者自研Framework统计,三方服务包括Fabric,Bugly等。这篇文章讲到的Crash Log是Apple提供的。获取设备获取USB连接设备,接着在XCode菜单栏依次选择:Window ->...
原创
发布博客 2018.07.06 ·
28940 阅读 ·
5 点赞 ·
4 评论

XCode启动参数和环境变量

前言这一部分介绍XCode中Argument/Options模块,通过这两个模块,我们可以在启动App的时候传递一些额外的参数进去,覆盖系统的默认值,从而实现特定场景的调试。OptionsOptions这里的内容相对简单,但是却容易被忽略。Core Location用来模拟App的位置Application Data 可以用于测试CoreData的Scheme迁移Ro...
原创
发布博客 2018.06.30 ·
5002 阅读 ·
6 点赞 ·
1 评论

Safari/Chrome调试WebView

前言最近在写《iOS代码调试》系列的博客,估计会有十篇以上的内容,等到都写完了会在Github开源出来,欢迎关注我的Github:LeoMobileDeveloperWebView大多数App会选择H5去实现某些弱交互但是却需要热更新界面,这时候WebView就派上用场了,那么如何对WebView进行调试呢?Safari开启开发菜单Safari -> 偏好设置...
原创
发布博客 2018.06.17 ·
11772 阅读 ·
4 点赞 ·
0 评论

深入理解Toll-Free Bridging

前言Toll-Free Bridging本身不是什么新技术,那为什么还要写这篇博客呢?原因是今天和一个同事讨论到相关问题的时候,发现理解并不够深入,于是仔细研究了下,整理成了这篇博客。本文的Github地址:LeoMobileDeveloperToll-Free Bridging是什么?摘自文档: There are a number of data types i...
原创
发布博客 2018.04.26 ·
3709 阅读 ·
2 点赞 ·
4 评论

iOS汇编精讲(上篇)

前言日常的应用开发中,主要用的语言是Objective(Swift),一些特殊场景下,可能还会用到C/C++,JavaScript,Shell,Python等。那么,一个iOS开发者为什么要了解汇编这么底层的语言呢? 因为看得懂汇编能够提高的代码调试和逆向能力。本文是作者学习汇编过程中整理的笔记,分为上下两篇:上篇主要是一些基础准备,下篇介绍Objective C汇编和一些逆...
原创
发布博客 2018.04.21 ·
5901 阅读 ·
7 点赞 ·
7 评论

Sqlite的事务,锁和WAL模式

前言事务定义了一组SQL语句的边界,这组SQL语句要么都执行,要么都不执行,事务保证了数据库完整性中的原子性。事务与数据库锁是紧密相关的,Sqlite用锁来保证事务的并发和执行顺序。事务在讲解事务的原理之前,我们先看看事务相关的API,主要有三个:begin transaction 开始一个事务。其中,transaction可省略,直接写begin即可。rollback 回...
原创
发布博客 2018.03.21 ·
3266 阅读 ·
2 点赞 ·
0 评论

Objective C范型

范型范型编程是一种程序语言设计范式,它允许程序员在使用强类型的语言编写代码的时候,延迟确定具体的类型。以Swift代码为例,假如有一个需求是要交换两个int,很容易写出类似代码func swapTwoInts(_ a: inout Int, _ b: inout Int) { let temporaryA = a a = b b = temporaryA}
原创
发布博客 2018.01.07 ·
2745 阅读 ·
4 点赞 ·
0 评论

新年快乐

新年快乐
原创
发布博客 2017.12.31 ·
982 阅读 ·
3 点赞 ·
3 评论
加载更多