Objective-C Autorelease Pool 的实现原理

内存管理一直是学习 Objective-C 的重点和难点之一,尽管现在已经是 ARC 时代了,但是了解 Objective-C 的内存管理机制仍然是十分必要的。其中,弄清楚 autorelease 的原理更是重中之重,只有理解了 autorelease 的原理,我们才算是真正了解了 Objecti...

2018-07-12 16:05:09

阅读数 49

评论数 0

黑幕背后的Autorelease

我是前言Autorelease机制是iOS开发者管理对象内存的好伙伴,MRC中,调用[obj autorelease]来延迟内存的释放是一件简单自然的事,ARC下,我们甚至可以完全不知道Autorelease就能管理好内存。而在这背后,objc和编译器都帮我们做了哪些事呢,它们是如何协作来正确管理...

2018-07-12 14:21:16

阅读数 95

评论数 0

【iOS 应用瘦身】使用 Clang 插件扫描无用代码(Part3)

前言经过前两篇文章的尝试,我们已经成功的实现了一个无用代码检查插件。但是一个成熟的项目,其中的代码复杂度远比前文的 Demo 要高得多,要想真正在项目工程中运行插件,检查无用代码,还有许多坑要踩。本篇文章中,我将分享自己在从 Demo -> 实际项目的适配过程中所遇到的问题一...

2018-02-24 17:56:27

阅读数 287

评论数 0

【iOS 应用瘦身】使用 Clang 插件扫描无用代码(Part2)

前言在上一篇文章中,我们了解了 AST 树的结构,并简单的实现了一个 RecursiveASTVisitor 子类,成功的访问了语法树上的各个节点。回头再看看一下前文的代码,结合官方文档,我们可以大致整理出如下调用逻辑:Clang 对 AST 树的解析是以单个文件为单位的,这点我们从 ast-du...

2018-02-24 17:55:44

阅读数 293

评论数 0

【iOS 应用瘦身】使用 Clang 插件扫描无用代码(Part1)

前言最近组里的项目遇到了一个瓶颈问题:代码段超标,简单的说,就是编译后输出的可执行文件太大了,来看看 官方文档 中的相关规定:For iOS and tvOS apps, check that your app size fits within the App Store requirements...

2018-02-24 17:54:56

阅读数 868

评论数 0

当我们谈论iOS瘦身的时候,我们到底在谈论些什么

不断的开发迭代,产品经理不断的添加需求,引入的资源文件几乎是只加不减,猛然回首,iOS包已经100多m,看来iOS瘦身迫在眉睫啊!!!!iOS瘦身的好处我们先来讨论 iOS瘦身的好处,正所谓知其然知其所以然。iOS瘦身有哪些好处?1. However, consider download time...

2018-02-24 15:21:39

阅读数 113

评论数 0

iOS微信安装包瘦身

前提 微信经过多次版本迭代,产生不少冗余代码和无用资源。之前微信也没有很好的手段知道哪个模块增量多少。另外去年10月微信开始做ARC支持,目的是为了减少野指针带来的Crash,但代价是可执行文件增大20%左右。而苹果规定今年6月提交给Appstore的应用必须支持64位,32位和64位两...

2018-02-02 11:44:17

阅读数 558

评论数 0

iOS监听weak属性

一.KVO特点         观察者观察的是属性,只有遵循 KVO 变更属性值的方式才会执行KVO的回调方法,例如是否执行了setter方法、或者是否使用了KVC赋值。如果赋值没有通过setter方法或者KVC,而是直接修改属性对应的成员变量,例如:仅调用_name = @&quo...

2018-01-30 11:35:02

阅读数 267

评论数 0

正确使用多线程同步锁@synchronized()

在上篇多线程安全的文章中,我曾推荐过大家使用@synchronized来使得代码获得原子性,从而保证多线程安全。这篇文章向大家介绍一些@synchronized的知识点和应该避免的坑。 @synchronized原理 @synchronized是几种iOS多线程同步机制中最慢的一个,同...

2018-01-30 10:38:00

阅读数 428

评论数 0

关于 @synchronized,这儿比你想知道的还要多

本文翻译自 Ryan Kaplan 的 More than you want to know about @synchronized 因为原文一些内容写的不太准确,我按照我的理解做出了批注和补充。 如果你已经使用 Objective-C 编写过任何并发程序,那么想必是见过 @synch...

2018-01-29 21:52:35

阅读数 71

评论数 0

遍历自身加载的dylib--获取载入地址和ASLR地址等

for (int i = 0; i _dyld_image_count(); i++) { char *image_name = (char *)_dyld_get_image_name(i); const struct mach_header *mh = _dy...

2018-01-29 15:02:08

阅读数 103

评论数 0

EXC_BAD_ACCESS异常 _block_invoke 问题

我们在调用block时,如果这个block为nil,则程序会崩溃,报类似于EXC_BAD_ACCESS(code=1, address=0xc)异常【32位下的结果,如果是64位,则address=0x10】。如图1,这个异常表示程序在试图读取内存地址0xc的信息时出错。 在定义一个...

2018-01-12 16:48:56

阅读数 110

评论数 0

iOS中检测Zombie对象的具体实现

我们知道,如果在XCode中开启了Zombie Objects。如图。 那么在一个对象释放后,再次给该对象发送消息,在Xcode控制台中,可看到如下打印信息。这些信息可以帮助我们定位问题。 ZoombieDemo[12275:2841478]***-[Testtest]:messages...

2018-01-12 16:32:40

阅读数 87

评论数 0

深入理解Objective-C:Category

摘要 无论一个类设计的多么完美,在未来的需求演进中,都有可能会碰到一些无法预测的情况。那怎么扩展已有的类呢?一般而言,继承和组合是不错的选择。但是在Objective-C 2.0中,又提供了category这个语言特性,可以动态地为已有类添加新行为。如今category已经遍布于Object...

2018-01-10 14:27:07

阅读数 57

评论数 0

iOS super关键字帮我们做了什么?

× iOS super关键字帮我们做了什么? 本篇文章讲的是super的实际运作原理,如有同学对super与self的区分还有疑惑的,请参考ChenYilong大神的《招聘一个靠谱的iOS》面试题参考答案(上)。 super究竟在干什么? 官方提到的super关键字...

2018-01-08 22:11:33

阅读数 75

评论数 0

如何在 iOS 中解决循环引用的问题

稍有常识的人都知道在 iOS 开发时,我们经常会遇到循环引用的问题,比如两个强指针相互引用,但是这种简单的情况作为稍有经验的开发者都会轻松地查找出来。 但是遇到下面这样的情况,如果只看其实现代码,也很难仅仅凭借肉眼上的观察以及简单的推理就能分析出其中存在的循环引用问题,更何况真实情况往往比这...

2017-12-08 15:06:46

阅读数 403

评论数 0

FBRetainCycleDetector源码分析

概述 FBRetainCycleDetector是facebook开源的一个用来检测对象是否有强引用循环的静态库。 strong和weak strong和weak在声明中使用表示这是一个强引用还是弱引用对象。 强引用:只要引用存在,对象就不能被销毁。弱引用:弱引用不会导致对象不能销毁,只要没有...

2017-12-07 23:17:34

阅读数 686

评论数 0

Friday Q&A : 动手实现 objc_msgSend

作者 Mike Ash 原文地址 objc_msgSend 函数支撑了我们使用 Objective-C 实现的一切。Gwynne Raskind,Friday Q&A 的读者,建议我谈谈 objc_msgSend 的内部实现。要理解某件事还有比自己动手实现一次更好的方法吗?咱们来自己...

2017-12-07 15:42:05

阅读数 98

评论数 0

提示
确定要删除当前文章?
取消 删除
关闭
关闭