-
自动引用计数(一)
目录 什么是自动引用计数 内存管理/引用计数什么是自动引用计数自动引用计数 ARC (Automatic Reference Counting)是指内存管理中对引用采取自动计数的技术。既让编译器来进行内存管理。 在LLVM编译器中设置ARC为有效状态,就无需再次键入retain和release代码了。满足以下条件就无需手工输入retain和release代码了。 Xcode4.2或以上版本 LLVM3.0或以上版本 编译器选项中设置ARC有效内存管理/引用计数一、概要生成对象...…
-
Category
目录 实现原理 +load方法 +initialize方法 关联对象实现原理Category编译之后的底层结构是struct category_t,里面存储着分类的对象方法、类方法、属性、协议信息,在程序运行的时候,runtime将Category的数据,合并到类信息中(类对象、元类对象中)。定义在objc-runtime-new.h中的Category的结构struct category_t { const char *name; classref_t cls; ...…
-
KVC
目录 基本使用 分析基本使用KVC的全称是Key-Value Coding,俗称键值编码,可以通过一个key来访问某个属性。创建一个Person和Cat类 Person.hNS_ASSUME_NONNULL_BEGIN@interface Cat:NSObject@property (nonatomic, assign) float weight;@end@interface Person : NSObject;@property (nonatomic, strong) Cat * ...…
-
KVO
目录 基本使用 分析 NSKVONotifying_Person 补充基本使用KVO的全称是Key-Value Observing,俗称键值监听,可以用于监听某个对象属性值的改变。创建一个Person类@interface Person : NSObject@property (assign, nonatomic) int age;@end使用案例#import "ViewController.h"#import "Person.h"@interface ViewControlle...…
-
NSObject的本质(五) 创建对象
参考文章:OC源码分析之对象的创建 参考文章:Alloc 和 AllocWithZone 区别和联系目录 alloc init alloc与allocWithZoneallocalloc的调用流程图alloc源码分析,参考下面的文章,从源码分析解释了流程调用OC源码分析之对象的创建init和new看下init的源码- (id)init { return _objc_rootInit(self);}id_objc_rootInit(id obj){ // In pra...…
-
NSObject的本质(四) isa与superClass
目录 isa superClass 总结isa1.我们先把instance、 class、 meta-class放到一个表中看下 instance 实例对象 class 类对象 meta-class 元类对象 isa isa isa … superClass superClass 成员变量的值 属性/对象方法/协议/...…
-
NSObject的本质(三) 对象分类
目录 对象分类对象分类一、OC对象主要分为三种 instance 实例对象 class 类对象 meta-class 元类对象二、instancePerson * person1 = [[Person alloc] init];person1->_age = 3;Person * person2 = [[Person alloc] init];person2->_age = 4;person1与person2是NSObject的instance对象(...…
-
NSObject的本质(二) 内存查看与优化
参考文章:字节范儿 の 内存对齐目录 NSObject对象内存查看 NSObject对象内存优化NSObject对象内存查看//创建一个Student对象Student * student = [[Student alloc] init];student->_age = 18;student->_number = 20;lldb调试:(lldb) po class_getInstanceSize([student class]) 16(lldb) po mallo...…
-
NSObject的本质(一) 占用内存
目录 NSObject对象占用多少内存NSObject对象占用多少内存一、先来认识两个函数可通过这两个函数来查看实例大小和占用空间的大小获取实例大小//获得NSObject实例对象的成员变量所占用的大小(理论需要的大小)size_t size = class_getInstanceSize([obj class]);printf("size=%zu\n",size);//8获取开辟空间大小//获得obj指针所指向内存的大小(实际分配的大小)size_t size1 = malloc_si...…
-
计算机渲染原理⭐️
目录 渲染原理 渲染流水线渲染原理一、屏幕刷新率是60FPS,且UI在主线程刷新1秒是1000毫秒,每秒进行60次屏幕刷新,也就是60帧图像,所以每帧图像停留的时间是16.17毫秒UI为什么要在主线程刷新?1、UIKit框架不是线程安全的,在不同的线程下分别更新UI会有问题,比如一个线程要把lable显示成功两个字,一个线程要把lable显示失败两个字。 所以需要放在一个线程内,这个线程就是主线程2、用户的触摸、手势等事件都是在主线程上处理的,如果 UI 操作在其他线程上执行,可能导...…
-
drawRect
目录 介绍 调用时机 调用栈介绍该方法是做什么的? 这个方法的默认实现什么也不做。 视图需要自定义绘制时(UIKit提供的视图无法满足时),可以重写该方法。比如渐变背景、绘制图形和路径等。需要注意的地方 当这个方法被调用时,UIKit已经为你的视图配置了适当的绘图环境,你可以调用任何绘图方法和函数。 您应该将任何绘图限制在rect参数中指定的矩形内。调用时机1、当视图首次显示时。 2、视图需要更新时,比如屏幕旋转和视图大小改变时。 3、调用setNeedsDis...…
-
layoutSubviews
参考文章:setNeedsLayout VS layoutIfNeeded 参考文章:[译] 揭秘 iOS 布局 参考文章:runloop 与 布局目录 介绍 调用时机 setNeedsLayout layoutIfNeeded 总结介绍-(void)layoutSubviews;子类可以根据需要重写这个方法,以执行更精确的子视图布局。initWithFrame:是在初始化时拿到的frame,如果初始化完成之后,父view的size发生了变化,需要对当前view及其子vi...…
-
CFBundleShortVersionString 与 CFBundleVersion
参考:info.plist key 说明目录 CFBundleShortVersionString CFBundleVersionCFBundleShortVersionStringCFBundleShortVersionStringCFBundleShortVersionString (String - iOS, macOS) specifies the release version number of the bundle, which identifies a released...…
-
课程6 iOS基础进阶班(第六部分)-大神推荐
参考:iOS基础进阶班合辑-大神推荐 本文是上面课程的摘要,只用于自己快速浏览.目录 29 数据库 30 数据库 2 31 数据库 329 数据库【录播】1.(了解)数据库简介(13分钟) iOS中数据存取的方式 Plist(NSArray\NSDictionary) Preference(偏好设置\NSUserDefaults) NSCoding(NSKeyedArchiver\NSkeyedUnarchiver) ...…
-
课程3 iOS基础进阶班(第三部分)-大神推荐
参考:iOS基础进阶班合辑-大神推荐 本文是上面课程的摘要,只用于自己快速浏览.目录 08 iOS大神班-网络多线程-第三章(中)08 iOS大神班-网络多线程-第三章(中)【录播】NSCache简单介绍(4分钟) NSCache是苹果官方提供的缓存类,具体使用和NSMutableDictionary类似,在AFN和SDWebImage框架中被使用来管理缓存 苹果官方解释NSCache在系统内存很低时,会自动释放对象,建议:接收到内存警告时主动调用removeAllOb...…
-
课程2 iOS基础进阶班(第二部分)-大神推荐
参考:iOS基础进阶班合辑-大神推荐 本文是上面课程的摘要,只用于自己快速浏览.目录 01 iOS大神班-UI进阶-第一章(上) 02 iOS大神班-UI进阶-第一章(下)启动过程/UIWindow/View的加载 05 iOS大神班-UI进阶-第三章(上)view的生命周期 07 iOS大神班-UI进阶-第四章(上)数据的本地存储 10 iOS大神班-UI进阶-第五章(上)事件的传递 11 iOS大神班-UI进阶-第五章(下)响应者链条 17 iOS大神班-UI进阶-...…
-
课程1 iOS基础进阶班(第一部分)-大神推荐
参考:iOS基础进阶班合辑-大神推荐 本文是上面课程的摘要,只用于自己快速浏览.目录 01 iOS大神班-UI基础-第一章(上) 02 iOS大神班-UI基础-第一章(下) 03 iOS大神班-UI基础-第二章(上) 04 iOS大神班-UI基础-第二章(中) 06 iOS大神班-UI基础-第三章 07 iOS大神班-UI基础-第四章 08 iOS大神班-UI基础-第五章(上) 09 iOS大神班-UI基础-第五章(下) 11 iOS大神班-UI基础-第六章(下) ...…
-
File介绍
目录 概览 详细概览在Ruby中,File 类是用于处理文件操作的核心类之一。它提供了许多方法,使得文件的读取、写入、以及其他一些文件操作变得简单而灵活。1-1 文件是否存才 File.exist? path1-2 创建文件 file = File.new fileName file = File.open fileName "w"2 文件需要打开(r w a)和关闭 file = File.open path, "r" file.close3 文件内容的...…
-
Dir介绍
目录 概览 详细概览获取当前路径和修改当前工作目录 Dir.pwd -> string #接受一个可选参数,成功返回0。不指定string切换到HOME目录 Dir.chdir( [ string] ) -> 0 目录是否存在和创建删除一个目录 Dir.exist?(file_name) -> true or false Dir.mkdir( string [, integer] ) -> 0 Dir.delete( s...…
-
Ruby概览
目录 常量 变量和数据类型 分支结构 循环结构常量# 常量Name = "xiaoming"# 变量age = 18# 全局变量$all = "hello world"变量和数据类型一、基础类型bl = falsenum = 18str = "hello wolrd"array = [1, 2, 3]hash = {name: "xiaoxing", age: 18}二、方法# 方法def testfn name, age puts "#{name},#{age}" e...…