
iOS_Objective-C
文章平均质量分 65
Jsen_Wang
态度决定一切
展开
-
dispatch_walltime与dispatch_time_t 的区别
dispatch_walltime的官方文档解释如下Functiondispatch_walltime// 根据系统时钟,创建一个绝对时间Creates a dispatch_time_t using an absolute time according to the wall clock.Declarationdispatch_time_t dispatch_walltime(con...原创 2020-03-26 11:36:25 · 1349 阅读 · 0 评论 -
iOS管理对象内存的数据结构以及操作算法--SideTables、RefcountMap、weak_table_t(二)
这篇文章是之前那篇文章iOS管理对象内存的数据结构以及操作算法--SideTables、RefcountMap、weak_table_t的补充和延伸。如果没有阅读过前一篇文章请先看那一篇。上一篇文章中关于SideTables、SideTable和RefcountMap三者关系可能描述的不太清楚。很多朋友表示看起来晕乎乎的。当初我在研究的时候也是蒙圈了好长一段时间。所以特意写了这篇文章来...转载 2020-03-21 17:38:51 · 619 阅读 · 0 评论 -
iOS管理对象内存的数据结构以及操作算法--SideTables、RefcountMap、weak_table_t (一)
通过阅读本文你可以了解iOS管理对象内存的数据结构是什么样的,以及操作逻辑。对象的reatin、release、dealloc操作是该通过怎样的算法实现的,weak指针是如何自动变nil的。 本文所阐述的内容代码部分在苹果的开源项目objc4-706中。** 本文流程:**一、引用计数的概念二、抛出问题三、数据结构分析(* SideTables、RefcountMap、weak_...转载 2020-03-21 16:00:40 · 618 阅读 · 0 评论 -
Runtime objc4-779.1 Runtime在实际开发中的应用之__attribute__
这是一个llvm的指令,很强大,官方文档中有很多说明,我们这里记录我们在开发中可能会遇到的场景和应用指令格式__attribute__(相关属性)常见场景1 availability 对版本、平台等情况做说明在某些时候我们需要对不同的版本和平台做特别处理,或者API支持,苹果也有很多这种场景,比如iOS10的系统通知API,UITableView中某些API的限定使用的API_DEPRE...原创 2020-03-12 11:48:38 · 332 阅读 · 0 评论 -
Runtime objc4-779.1 一图看懂iOS Runtime消息转发
消息发送流程图设定消息接受者为receiver图是用markdown画的,适配可能有点问题,浏览器页面放大看好一些Created with Raphaël 2.2.0开始objc_msgSend(receiver, SEL)通过receiver,获取isa指针,并获取其class在class的cache中查找SEL是否存在?匹配Method,执行IMP结束在class的method_list...原创 2020-03-11 16:21:36 · 506 阅读 · 3 评论 -
Runtime objc4-779.1 App启动过程中Runtime都干了什么?
知识准备首先我们要知道一个场景,我们点击屏幕上的应用,到我们看到应用完全展示,并可以操作,这个过程中,系统、runtime、我们自己的代码,都做了大量的工作,这个过程有很多优秀的博文已经详细的讲述过,例如深入理解iOS App的启动过程 —by 为自己丶拼个未来,这篇文章的内容其实绝大部分来自于苹果WWDC2016中的一个官方视频,如果对App启动过程不熟悉的同学可以这两个结合着看一下.Run...原创 2020-03-10 18:45:58 · 745 阅读 · 0 评论 -
Runtime objc4-779.1 为什么不能向一个已存在的类添加成员变量?有什么办法达到相同的效果(2)?
接上一篇博客继续第二种方法Func2 利用关联实现对已存在的类添加成员变量的效果涉及两个主要的API给某一个对象关联一个对象objc_setAssociatedObject(id _Nonnull object, const void * _Nonnull key, id _Nullable value, objc_AssociationPolicy policy)获取某一个对象的关联...原创 2020-03-06 17:45:19 · 356 阅读 · 0 评论 -
Runtime objc4-779.1 为什么不能向一个已存在的类添加成员变量?有什么办法达到相同的效果?
这个问题在面试中经常被问起,答案也很明显: 因为类的结构已经在编译期被固定,不能动态更改.一句话很简单,但是背后却有很多的问题,为什么方法可以?为什么不能允许实例变量和方法一样动态化?等等问题.我们先来看看怎么解决往类中添加实例变量的需求.Func 1 动态创建类既然原来的类已经在编译期被“固定”,那么我们动态创建的类总可以添加变量吧,让新创建的类继承原来的类不就可以了?操作一下!Fu...原创 2020-03-05 17:40:37 · 534 阅读 · 0 评论 -
Runtime objc4-779.1 OC中,为什么swizzleMethod时要先addMethod?
我们swizzleMethod的方法通常如下void swizzleMethod(Class class, SEL originalSelector, SEL swizzledSelector){ Method originalMethod = class_getInstanceMethod(class, originalSelector); Method swizzledMe...原创 2020-03-03 18:54:06 · 436 阅读 · 0 评论 -
Runtime objc4-779.1 通过runtime源码对OC对象销毁过程解析
Runtime objc4-779.1 通过runtime源码对OC对象销毁过程解析Step1 NSObject.mm line 2340// Replaced by NSZombies- (void)dealloc { // Setp2 _objc_rootDealloc(self);}Step2 NSObject.mm line 1814void_objc_rootD...原创 2020-02-27 17:22:28 · 1216 阅读 · 2 评论 -
Runtime objc4-779.1 通过runtime源码对OC对象初始化过程解析
Runtime objc4-756.2 通过runtime源码看对象初始化过程常用对象初始化代码[[NSArray alloc] init][NSArray new]我们先根据 alloc+init的方式来捋一遍runtime初始化对象的过程,看看有哪些值得我们学习的地方.以下书写方式为 <步骤号><代码所在文件><代码行数>所以阅读本文,最好是同...原创 2020-02-24 17:59:41 · 698 阅读 · 0 评论 -
iOS 应用信息、手机设备信息、网络信息、权限信息、GPS、网络信息、存储信息、屏幕信息、传感器信息、手机卡信息等信息获取工具
JSAnalysis本文只做介绍,项目源码在github,链接如下JSAnalysis项目github链接项目简介JSAnalysis 是一款苹果设备信息静默获取的工具。它可以在用户无感知的情况下获取到尽可能多的设备信息,方便开发者对用户提供更好的体验。本工具仅限于技术学习交流使用.设计要点使用AES256加入签名、敏感信息加密. 防篡改、防劫持.在没有权限获取对应信息时统一设置v...原创 2020-02-21 17:24:23 · 1874 阅读 · 0 评论 -
Runtime objc4-756.2 objc_class中class_ro_t与class_rw_t源码关系分析
先上源码struct objc_class : objc_object { // Class ISA; Class superclass; cache_t cache; // formerly cache pointer and vtable class_data_bits_t bits; // class_rw_t * plus c...原创 2020-02-21 17:19:46 · 992 阅读 · 0 评论 -
OC-文件操作
学习目标掌握NSFileManager类常用的文件管理操掌握NSFileHandle类常用的文件数据操作 了解NSData类的常用操作理解单例软件设计模式:1.单例模式(最常用的设计模式)2.MVC模式(model view controller)(也常用)3。代理委托模式(也是常用的设计模式)4。工厂模式(一般般)5.kvc kvo原创 2014-10-20 09:13:11 · 1099 阅读 · 0 评论 -
Block截获自动变量实现与__block修饰符内部实现
Block截获自动变量的实现解析__block修饰符内部实现解析原创 2017-03-24 18:54:39 · 997 阅读 · 0 评论 -
Block存储域探析
接《Block截获自动变量实现与__block修饰符内部实现》我们继续探讨Block留下的问题1,__Block_byref_i_0 *__forwarding;这个指向自身的指针是什么鬼,有什么作用,什么时候用? 2,Desc_0结构体中多出来的void (*copy) void (*dispose)这两个方法有什么作用,什么时候用?Block 和 __block变量的实质 名称 实原创 2017-04-21 17:31:24 · 1698 阅读 · 0 评论 -
AFNetWorking3.2.0源码阅读(一)-AFURLSessionManager.h
AFNetWorking3.2.0源码阅读(一)-AFURLSessionManager.hAFNetWorking3.2.0源码阅读(一)-AFURLSessionManager.hAFURLSessionManager.h 介绍属性解析Getting Session Tasks (获取不同task接口,不细说)Managing Callback QueuesInitializ...原创 2018-05-07 11:11:18 · 455 阅读 · 0 评论 -
AFNetWorking3.2.0源码阅读-AFURLSessionManager(二)
AFNetWorking3.2.0源码阅读-AFURLSessionManager(二)AFURLSessionManager.m 文件内容解析Definestatic dispatch_queue_t url_session_manager_creation_queue() { static dispatch_queue_t af_url_session_manag...原创 2018-05-21 00:21:14 · 508 阅读 · 0 评论 -
iOS12适配及问题记录
iOS12适配及问题记录版本信息 Xcode: Version 10.0 beta (10L176w) macOS: 10.14 Beta (18A293u) iOS: 12.0(16A5288q)问题及解决过程1,StatusBar内部结构改变 现象:crash crash log: 1,-[_UIStatusBarIde...原创 2018-06-07 19:10:32 · 18061 阅读 · 0 评论 -
NSObject到底多么大引发的一些思考
NSObject到底多么大引发的一些思考本文引用及参考文献,感谢一下博主的分享:C++ 内存对齐—by enos小码哥iOS学习笔记第一天: Objective-C的本质—by 冰凌天Objective-C 检测运行时对象的内存大小—by 蓝新How to find the size of any object in iOS一个问题,一个NSObject的实例占多大内存...原创 2018-09-04 18:01:40 · 609 阅读 · 0 评论 -
WKWebView中MessageHandler的内存泄漏问题解决过程
背景项目中使用了WKWebView替换了之前的UIWebView,牵扯到Hybird开发,我们需要和H5交互,所以用到了WKWebViewConfiguration 中的 WKUserContentController所以初始化代码如下 WKUserContentController *userContentController = [[WKUserContentController原创 2017-10-31 13:52:25 · 9601 阅读 · 4 评论 -
NSString的内存管理之 __NSCFConstantString、NSTaggedPointerString、__NSCFString
> 转自:http://skyfly.xyz/2015/11/08/iOS/NSString%E7%9A%84%E5%86%85%E5%AD%98%E7%AE%A1%E7%90%86/ by skyfly 在 Objective-C 的 Fondation 框架中 NSString 对象是很复杂的存在,各种方式创建以及不同长度的字符串都会影响 NSString 对象在内存中所处的...转载 2018-09-15 11:44:46 · 6564 阅读 · 1 评论 -
SDWebImage源码中阅读总结-那些不解和收获
SDWebImage源码中阅读总结|那些不解和收获图片怎么加载出来的?流程编号关键代码代码位置描述附加补充code_1sd_setImageWithURL:placeholderImage:UIImageView+WebCache.h_line:64入口代码,不多解释Ncode_2sd_internalSetImageWithURL:(nullable...原创 2018-09-29 18:39:55 · 522 阅读 · 0 评论 -
Runtime objc4-756.2 isa_t与isa (1)
前情提要:runtime的源码版本: objc4-723时间:2018-11-23Runtime 可能并不是你看到的那样在搜索引擎中搜索“Runtime”baidu:google:这里边第一页的内容,挨个点进去,所有的人都会拿以下代码说事情:struct objc_object { Class isa OBJC_ISA_AVAILABILITY;};struct...原创 2018-11-23 18:11:02 · 439 阅读 · 0 评论 -
Runtime objc4-723 objc_class
Runtime objc4-723 objc_class前情提要:runtime的源码版本: objc4-723时间:2019-01-06objc_classstruct objc_class : objc_object {// Class ISA;Class superclass;cache_t cache; // formerly cache point...原创 2019-01-06 01:10:15 · 1178 阅读 · 0 评论 -
Runtime objc4-723 Tagged Pointer & 对象初始化流程
Runtime objc4-723 Tagged Pointer & 对象初始化流程Tagged Pointer传统意义上,指针的值制式一个内存地址,它本身并没有什么意义,但是在Apple用了64位的系统后,一个指针就会有8个字节 64位,这么长的内容只表示一个地址是很浪费的。所以为了优化这个问题,Tagged Pointer概念被提出来,它的出现让一个指针的值富有了非地址之外的其他...原创 2019-02-27 17:21:38 · 239 阅读 · 0 评论 -
Block实现
Block是如何实现的我们通过clang编译出Objective-C文件对应cpp文件,去看他的实现方式,对比不同样式的block的不同, 从中得到它的实现思想无参数Block的基本实现#import "ViewController.h"typedef void(^WxsBlock) ();@interface ViewController ()@end@implementation ViewCo原创 2017-03-23 14:34:12 · 628 阅读 · 0 评论 -
Runtime(三)
11、系统类的方法实现部分替换- (void) methodExchange { Method m1 = class_getInstanceMethod([NSStringclass],@selector(lowercaseString)); Method m2 = class_getInstanceMethod([NSStringclass],@sel原创 2016-01-18 23:02:09 · 395 阅读 · 0 评论 -
Runtime(四)
用C代替OC:#import #import #import extern int UIApplicationMain (int argc,char *argv[],void *principalClassName,void *delegateClassName);struct Rect {原创 2016-01-18 23:03:54 · 449 阅读 · 0 评论 -
Runtime(一)
原文传送门 http://blog.youkuaiyun.com/lizhongfu2013/article/details/9496705一些公用类:@interface CustomClass : NSObject- (void) fun1;@end@implementation CustomClass- (void) fun1原创 2016-01-18 22:53:53 · 429 阅读 · 0 评论 -
理解Objective-C Runtime
当人们初学 Cocoa/Objective-C 时,Objective-C Runtime 是被忽略的特性之一。原因是 Objective-C(这门语言)很容易在几小时内就熟悉,新学 Cocoa 的人花费他们大部分的时间学习 Cocoa 框架和适应它是如何工作的。然而每个人至少应该知道一些 runtime 的工作细节,需要比知道编译器会把 [target doMethodWith:var1];原创 2016-01-18 19:07:09 · 705 阅读 · 0 评论 -
Objective-C 中nil Nil NULL NSNull 之间的区别
nil 是对一个Objective-C对象赋空值的标签 指向一个对象的指针为空 在objc.h中的定义如下所示:#ifndef nil# if __has_feature(cxx_nullptr)# define nil nullptr# else# define nil __DARWIN_NULL# endif#endif比如 NSString * str = nil;N原创 2016-01-18 17:43:49 · 581 阅读 · 0 评论 -
3DTouch Demo 从零构建3D Touch 教学
从0开始,详细实现3D Touch常用功能,满足日常需求,良心Demo原创 2015-11-27 10:27:29 · 2070 阅读 · 0 评论 -
instancetype和id类型的区别和用处
今天研究代码的时候,发现居然返回 instancetype 类型,很惊讶自己学识浅显。 Clang的文档里提到instancetype is a contextual keyword that is only permitted in the result type of an Objective-C method. 也就是说,instancetype只能作为返转载 2014-11-12 09:08:02 · 868 阅读 · 0 评论 -
数组 NSArray NSMutableArray
【数组部分】学习目标:掌握NSArray类的重点函数使用掌握NSMutableArray类的重点函数使用了解NSMutableArray与NSArray的继承关系1.需要理解的知识1.1不可变数组1.1.1OC数组和C数组的区别1,创建方式不同:c语言中的数组,int a[10]={1,2,3,4,5,6,7,8,原创 2014-09-23 10:34:58 · 952 阅读 · 0 评论 -
NSString 和 NSMutableString(2)
2.2 NSMutableString 2.2.1指定索引插入子串 - (void)insertString:(NSString *)aString atIndex:(NSUInteger)loc; //插入字符串 // insertString:想要插入的字符串对象, //atIndex:在这个下标开始插入,后边原创 2014-09-23 10:20:55 · 537 阅读 · 0 评论 -
类中方法的分类和实现
3.3【成员变量】@interface Student : NSObject//用实例变量(成员变量)描述类的特征//实例变量要写在花括号{}里边,在@interface和@end中间,@end表示类的结束//成员变量按照编程规范,都要写成下划线的形式,不然会让人觉得你太不专业{ char *_name; int _stuId;}@end3.4【实例方法】我们创建一个Dog类:3.4.1 实例方法原创 2014-09-23 10:04:41 · 1111 阅读 · 0 评论 -
类与对象
理解部分(理论部分)一、【什么是OC】Objective-C(面向对象),在C语言的基础上发展而来,oc中完全兼容C语言。二、【为什么要学习OC】学习iOS开发,我们需要这一个苹果的主推语言,用来开发移动设备的编程开发,当然也可以用来做Mac电脑端的开发。三、【oc的语言的发展】原创 2014-09-23 09:56:40 · 596 阅读 · 0 评论 -
Runtime(二)
一些公用类:@interface ClassCustomClass :NSObject{ NSString *varTest1; NSString *varTest2; NSString *varTest3;}@property (nonatomic,assign)NSString *varTest1;@prop原创 2016-01-18 22:57:20 · 385 阅读 · 0 评论 -
iOS常用判断的宏定义:系统版本号,屏幕宽高,设备型号, 自定义NSLog等
常用的iOS 宏定义,系统版本号,设备型号,自定义NSLog,物理屏幕宽高原创 2015-12-22 15:09:35 · 9527 阅读 · 1 评论