- 博客(31)
- 收藏
- 关注
原创 【OC/Swift混编】接口中数据类型的建议(三):类型转换底层实现原理
本文目录一、前言二、OC到Swift类型转换底层实现结论三、Swift到OC类型转换底层实现结论四、工欲善其事,必先利其器五、分析NSDictionary转换为[String:Any]六、分析NSMutableDictionary到Dictionary\一、前言本文通过反汇编伪代码+Swift源码+Swift的Foundation源码来分析OC与Swift之间数据类型转换的底层实现,结论如下:二、OC到Swift类型转换底层实现结论对于NSString,NSArray,NSDictionary等这类不
2022-01-29 13:00:00
1434
1
原创 【OC/Swift混编】接口中数据类型的建议(二):使用层面分析
本文目录一、前言二、代码结构三、不同数据类型下在Swift中的用法1.在Swift中使用NSDictionary2.类型转换失败导致程序崩溃3.在Swift中使用NSMutableDictionary4.在Swift中使用NSDictionary+范型5.在Swift中使用NSMutableDictionary+范型6.在Swift中使用Bool、Bool*四、附录:Swift完整代码一、前言上文说到,在OC/Swift混编下,对属性或参数的数据类型有如下建议:1.尽可能多地使用不可变类型,尽可能不
2022-01-29 10:00:00
1032
原创 【OC/Swift混编】接口中数据类型的建议(一):结论
前言但凡公司中Mac/iOS的产品年龄很大的的话,基本都是用OC去实现其业务逻辑的。而现在Swift更受人们的喜爱,从2021年12月的排行榜可以看出来,Swift位列第10,而OC位列第29;而从第三方库的生态来看,日益没落的OC已经明显不如Swift,很多OC的第三方库早已停止了维护……不管是因为个人想追随技术的脚步,还是因为OC的生态无法满足产品的需要,从而需要在老的产品里引入Swift……本文主要分享在OC/Swift混编情况下,公共接口中的属性及方法参数中数据类型的建议。废话不多说,先说结
2022-01-29 08:15:00
508
原创 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
195
原创 探究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
251
原创 探究Objective-C中的Category
本文目录一、基本概念二、基本使用三、底层实现四、Runtime加载Category过程五、类扩展与分类的区别一、基本概念Category是对已有的类进行扩展的一种方法。主要用途:为已有的类,添加新方法、属性。二、基本使用在实际项目中,很多情况下都需要计算某个字符串的md5值,为了满足这个需求,其中一个比较优雅的方法就是为NSString类添加Category,以下为实现步骤:1.创建NSString+Common.h文件,内容如下:#import <Foundation/Foundati
2021-08-23 21:18:43
193
原创 探究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
145
原创 探究Objective-C对象的内存模型(二):isa对象模型
本文目录前言一、回顾:实例对象的内存模型`instance`对象占用内存/实际分配内存`instance`内存模型二、探究isa对象模型如何获取`isa`指针?彩蛋:自己写一个getISA方法isa对象本质isa对象内存模型简略总结图前言上文讨论了实例对象的内存模型,今天我们接着来分析,isa指针所指向内存模型。一、回顾:实例对象的内存模型在分析isa指针之前,我们先来回顾一下上文中的内容,假设,有一个这样的类:@interface Main : NSObject@property int v
2021-07-25 16:35:42
272
原创 探究Objective-C对象的内存模型(一):实例对象
本文目录前言一、NSObject实例对象内存模型a.创建`NSObject`实例对象b.获取实例对象地址c.获取实例对象大小d.`obj`对象的本质彩蛋问题:如何在栈内存中创建一个`NSObject`的对象?e.`obj`对象内存模型(图)前言在大学时期学习C++时,为了深入了解C++的机制及实现原理,老师推荐了本《深度探索C++对象模型》,草率读完一遍后对当时的我来说收获巨大,一度自信心膨胀…然而在学习OC时,相关的深入的书籍有些缺乏,只能通过零零散散的博客了解个大概。因此,本系列文章通过查阅OC
2021-07-20 22:16:50
423
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
165
原创 Swift中的_(下划线)是什么意思
问题:Swift里的_(下划线)是什么意没有怎么接触过Swift,直接上手看的代码,遇到_符号,特此记录。let _ = 100 var _ = 200 for _ in 0...3 { print("do something...")}func fun1( _ x: Int, _ y: Int){ print("do something...")}func add(x:Int,y:Int) -> Int{ return x+y}_ = add(x: 1, y:
2021-07-04 01:14:34
869
原创 【Swift入门】如何在PlayGround中预览自定义View?
如何在PlayGround中预览自定义View?代码效果展示代码import UIKitimport PlaygroundSupportlet view = UIView();view.frame = CGRect(x: 0, y: 0, width: 200,height: 200);view.backgroundColor = UIColor.red;PlaygroundPage.current.liveView = view效果展示...
2021-07-03 18:46:53
421
原创 老司机带你探究NSScrollView的滚动原理
本文主要讲述如何实现可以控制NSScrollView滚动的Slider,借此来探究、深入理解NSScrollView滚动的原理,最终实现的Demo如下:接下来,我将通过以下四部分来由浅入深的探究NSScrollView。一、NSScrollView的结构。当我们通过Interface Builder将一个NSScrollView拖拽至某个ViewController时,整个NSScroll...
2018-10-18 14:46:25
2096
原创 RegexKitLite的介绍、安装与使用
一、介绍在Mac开发过程中,很多时候我们需要用到正则表达式,然而Cocoa中的正则表达式的使用不是那么顺手,我们可以使用第三方库来实现正则表达式,而强大的第三方正则表达式库RegexKitLite,恰好能满足我们的需求。二、安装安装过程如下:1、打开RegexKitLite官网。网址在此:http://regexkit.sourceforge.net/2、Download。...
2018-10-17 09:30:28
950
原创 理解xib(nib)、File’s Owner、First Responder、IBOutlet、IBAction
xib(nib):对象的描述,类似与VC的.rc资源文件。xib文件的内容格式为xml,可以在Xcode中通过界面编辑器直接进行可视化的界面编辑,内部存放着窗口和空间的各种属性。nib是二进制格式,不可以直接编辑,xib通过编译生成nib文件,让程序需要显示界面时可以加载并解析文件内容,然后显示设计好的窗口。File’s Owner:xib对应的类比如UIView的File’s Owner...
2018-10-15 16:08:11
541
原创 NSBundle介绍
bundle是一个目录,其中包含了程序会使用到的资源. 这些资源包含了如图像,声音,编译好的代码,nib文件(用户也会把bundle称为plug-in). 对应bundle,cocoa提供了类NSBundle.我们的程序是一个bundle. 在Finder中,一个应用程序看上去和其他文件没有什么区别. 但是实际上它是一个包含了nib文件,编译代码,以及其他资源的目录. 我们把这个目录叫做程序的m...
2018-10-12 18:42:28
2382
转载 Mac OS X下实现矩形部分圆角
问题在进行今天的内容之前,首先我想问一个问题:下图中,蓝色选择框与红色选择框除颜色、大小外有何不同?(我会在后文揭晓答案)目标本文今天要讨论的是:在Mac OS X下,如何实现矩形的部分圆角。比如这样:或者这样:解决方案要想实现上图样式,有两种解决方案。方案1:蠢萌描点法蠢萌描点法实现图2的原理图如下:如上图所示,首先确定整个矩形的的几个特殊点,然后通过CGContex...
2018-09-27 10:59:31
1326
原创 【已解决】Mac OS X如何设置Label(NSTextField)自适应居中?
问题在Mac OS X开发过程中,经常会使用Label(NSTextFiled)控件,对于文本长度不定的Label,我们如何设置其自动居中?解决方案Label居中时X、Y坐标的计算如下图所示假设有一个label处于superView中,当我们修改label内容后,我们可以通过以下方式调整位置,使其居中。IBOutlet NSView *superView;__weak IBOutle...
2018-09-19 15:15:37
3825
原创 NSRect(CGRect)结构及其常用接口详解
一、结构NSRect是一个用来表示矩形的结构体,在苹果官方文档中其声明如下:typedef CGRect NSRect;从上述声明来看,NSRect与CGRect是同一个类型,其定义汇总如下:struct CGRect { CGPoint origin; //起点坐标(x,y) CGSize size; //大小 width*height};type...
2018-09-18 11:32:47
1324
原创 WordPress插件学习笔记(一)
Part 零:前言假设我们需要一个具有这样功能的插件:将评论信息保存至txt文件内.那么需要做以下步骤的事情:Part 一 :基础信息/*Plugin Name: gxd_commentPlugin URI: http://gaoxiaodiao.comDescription: 评论加强,记录评论信息至txt文件.Author: 高小调Version: 1.0
2018-04-19 22:35:04
347
原创 C语言课设:中缀表达式转后缀表达式并求值(续)
前天看到有人给我很久之前写的一篇博客《C语言::将中缀表达式转换为后缀表达式并计算结果》指出了一个BUG.今天闲的没事,就把BUG修复一下,一看那代码写的,不忍直视,那个BUG更是让我啼笑皆非...这就是传说中的成长吧!看过去的自己总觉得像个傻逼-----------------------------------------------------------------------
2016-11-20 10:49:15
7582
1
转载 C语言::模拟实现strcat函数
题目要求编写一个C语言程序模拟实现strcat函数.(我们不妨先模拟实现一下strcat函数,然后再对照一下string.h库函数中strcat函数代码的实现,与大师肩并肩.)算法分析strcat函数功能:将两个字符串连接起来,最终返回连接后字符串的首地址.strcat函数原型:char *strcat(char *dest,const char *src);我们清楚地了解
2016-08-07 12:49:33
2840
原创 C语言::模拟实现strlen函数
题目要求编写一个C语言程序模拟实现strlen函数.算法strlen函数功能是计算字符串中字符的个数.(除\0外)而字符串本身就是一个字符数组,只不过末尾以\0结束.因此,我们只需遍历除\0之外的所有字符即可.有三种方法可以解决这个问题.算法总结方法一:设置一个整型计数器,遍历字符串.方法二:通过不断函数自身的递归.方法三:与方法一类似,设置一个char*变
2016-07-31 18:37:28
2238
原创 C语言::打印100-200之间的素数
题目要求编写一个C语言程序,要求打印100~200之间的素数算法分析在C语言程序中,我们要想打印100-200之间的素数,首先我们得判断该数是不是素数.判断素数的算法,有位大神写过这样一篇文章,我就不在详细赘述了。求质数算法的N种境界在此,我仅简单的总结归纳一下.算法总结境界一:假设要判断n是否为素数,就从2一直试除到n-1.境界二:从2开始一直试除到n/2.
2016-07-08 17:09:53
2811
原创 C语言::验证花括号成对出现
算法总结判断左右花括号是否成对出现需要两个条件:1.左右花括号数目必须相等.2.当右花括号出现时,左花括号数目必须大于右花括号.具体分析,请看C语言::验证花括号成对出现基础版#includeint main(){ //定义一个整型变量用来接收控制台数据 int ch = 0; //定义一个整型变量用来计算左花括号数目 int le
2016-07-07 14:15:54
3240
转载 求质数算法的N种境界
★引子 前天,俺在《俺的招聘经验[4]:通过笔试答题能看出啥?》一文,以"求质数"作为例子,介绍了一些考察应聘者的经验。由于本文没有政治敏感内容,顺便就转贴到俺在优快云的镜像博客。 昨天,某个优快云网友在留言中写道:老实说,这个程序并不好写,除非你背过这段代码如果只在纸上让别人写程序,很多人都会出错但是如果给一台电脑,大多数人都会把这个程序调试正确出这个题目没啥
2016-06-29 23:42:03
2999
原创 那些年C语言老师没有教给你的东西(一)
一、注释C语言注释:/**/(不能嵌套注释)C++注释://程序编译、链接时,会将注释替换成‘空格。in/*这是一段狗屁注释*/t a; 实际效果 = in t a;二、转义字符\ddd 转义为 8进制 printf("%d",'\010'); //输出8事实上等同于 printf("%d",'\10');\xddd 转义为 16进制 printf
2016-06-07 22:36:39
2674
原创 C语言::简单排序之插入排序
插入排序.....我先假设你不会插入排序,因此先从算法讲起。我知道在这么多读者中,一定会有读者抬杠说,我会插入排序算法。好吧,那我就假设你会插入排序算法,但是不会写代码;可能还有一小部分读者会继续抬杠说,我会插入排序算法,我也会写代码。那就请你按下键盘上Ctrl+F4,有惊喜哦! 一、插入排序之算法插入排序就是取出一个数字,将它插入对应的位置。这么说就太无聊了,于是乎下面我举
2016-06-07 17:16:12
2882
原创 将Ubuntu 14.06配置成Web服务器
上学期干的事了,但还是有些不完善,今天补完!一、在Ubuntu中安装Apache2(其他linux系统类似)在安装Apache2之前,我们首先更新系统:apt-get update(解决apt-get找不到软件包的问题 )更新完系统之后,我们就可以开始安装Apache2了:首先在终端输入:apt-get install apache2 //不要以为安装完
2016-06-05 18:17:14
3350
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人