![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
知识梳理
文章平均质量分 77
代码搬运小行家
这个作者很懒,什么都没留下…
展开
-
Objective-C知识体系(大神们的经典博文)
文章目录前言类与对象CategoryBlockRunTimeRunLoopGCD性能优化前言梳理一下各路大神的经典博文:类与对象isa指针指向哪里 - https://www.cnblogs.com/hwfengZxk/p/12965528.htmlObjective-C类成员变量深度剖析 - http://quotation.github.io/objc/2015/05/21/objc-runtime-ivar-access.html(巧妙实现成员变量的寻址)Objective-C 中的类和对原创 2021-10-10 14:00:22 · 156 阅读 · 0 评论 -
探究Objective-C中的block
本文目录一、`block`的本质二、`block`的变量捕获机制变量捕获机制的猜想验证变量捕获机制猜想三、`block`的三种类型__NSGlobalBlock____NSStackBlock____NSMallocBlock__四、`block`的`copy`操作本文将通过将OC代码转换为CPP代码的方式来探究Objective-C中block不同情况下的底层数据结构的情况。一、block的本质block的本质是一个封装了函数调用以及函数调用环境的OC对象。以一个最简单的一个block的定义如下:原创 2021-09-22 09:28:16 · 200 阅读 · 0 评论 -
探究Objective-C中的Category
本文目录一、基本概念二、基本使用三、底层实现四、Runtime加载Category过程五、类扩展与分类的区别一、基本概念Category是对已有的类进行扩展的一种方法。主要用途:为已有的类,添加新方法、属性。二、基本使用在实际项目中,很多情况下都需要计算某个字符串的md5值,为了满足这个需求,其中一个比较优雅的方法就是为NSString类添加Category,以下为实现步骤:1.创建NSString+Common.h文件,内容如下:#import <Foundation/Foundati原创 2021-08-23 21:18:43 · 143 阅读 · 0 评论 -
探究Objective-C中KVO的原理
本文目录一、KVO是什么二、KVO的基本使用1、确定被监听的对象属性2、确定监听者,注册监听回调,并处理业务逻辑3、触发KVO,查看效果三、KVO原理/本质四、验证一、KVO是什么KVO全称Key-Value Observing,是一种观察者模式,可通过以下步骤来使用:1、确定被监听的对象属性。2、确定监听者,注册监听回调,并处理业务逻辑。二、KVO的基本使用接下来,根据上述的步骤,写一个简单的Demo:1、确定被监听的对象属性首先创建一个MyStatus类,包含一个成员变量status原创 2021-08-01 16:55:23 · 109 阅读 · 0 评论 -
探究Objective-C对象的内存模型(二):isa对象模型
本文目录前言一、回顾:实例对象的内存模型`instance`对象占用内存/实际分配内存`instance`内存模型二、探究isa对象模型如何获取`isa`指针?彩蛋:自己写一个getISA方法isa对象本质isa对象内存模型简略总结图前言上文讨论了实例对象的内存模型,今天我们接着来分析,isa指针所指向内存模型。一、回顾:实例对象的内存模型在分析isa指针之前,我们先来回顾一下上文中的内容,假设,有一个这样的类:@interface Main : NSObject@property int v原创 2021-07-25 16:35:42 · 230 阅读 · 0 评论 -
探究Objective-C对象的内存模型(一):实例对象
本文目录前言一、NSObject实例对象内存模型a.创建`NSObject`实例对象b.获取实例对象地址c.获取实例对象大小d.`obj`对象的本质彩蛋问题:如何在栈内存中创建一个`NSObject`的对象?e.`obj`对象内存模型(图)前言在大学时期学习C++时,为了深入了解C++的机制及实现原理,老师推荐了本《深度探索C++对象模型》,草率读完一遍后对当时的我来说收获巨大,一度自信心膨胀…然而在学习OC时,相关的深入的书籍有些缺乏,只能通过零零散散的博客了解个大概。因此,本系列文章通过查阅OC原创 2021-07-20 22:16:50 · 336 阅读 · 1 评论 -
【Swift入门】01 - 基本语法
常量与变量变量:用var定义并初始化var x = 10只定义时,必须声明类型var x //Errorvar y: Intprint(y) //Errory = 100print(y) //100常量:用let声明只能赋值一次它的值不要求在编译时期确定,但使用前必须赋值一次不要求编译时期确定var age = 10;age += 20;let myAge = age;使用前必须赋值let age: Intprint(age) //Error原创 2021-07-04 01:42:20 · 117 阅读 · 0 评论