自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Mac开发修炼之路

Mac OS X开发

  • 博客(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 1205 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 944

原创 【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 439

原创 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 152

原创 探究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 192

原创 探究Objective-C中的Category

本文目录一、基本概念二、基本使用三、底层实现四、Runtime加载Category过程五、类扩展与分类的区别一、基本概念Category是对已有的类进行扩展的一种方法。主要用途:为已有的类,添加新方法、属性。二、基本使用在实际项目中,很多情况下都需要计算某个字符串的md5值,为了满足这个需求,其中一个比较优雅的方法就是为NSString类添加Category,以下为实现步骤:1.创建NSString+Common.h文件,内容如下:#import <Foundation/Foundati

2021-08-23 21:18:43 136

原创 探究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 104

原创 探究Objective-C对象的内存模型(二):isa对象模型

本文目录前言一、回顾:实例对象的内存模型`instance`对象占用内存/实际分配内存`instance`内存模型二、探究isa对象模型如何获取`isa`指针?彩蛋:自己写一个getISA方法isa对象本质isa对象内存模型简略总结图前言上文讨论了实例对象的内存模型,今天我们接着来分析,isa指针所指向内存模型。一、回顾:实例对象的内存模型在分析isa指针之前,我们先来回顾一下上文中的内容,假设,有一个这样的类:@interface Main : NSObject@property int v

2021-07-25 16:35:42 217

原创 探究Objective-C对象的内存模型(一):实例对象

本文目录前言一、NSObject实例对象内存模型a.创建`NSObject`实例对象b.获取实例对象地址c.获取实例对象大小d.`obj`对象的本质彩蛋问题:如何在栈内存中创建一个`NSObject`的对象?e.`obj`对象内存模型(图)前言在大学时期学习C++时,为了深入了解C++的机制及实现原理,老师推荐了本《深度探索C++对象模型》,草率读完一遍后对当时的我来说收获巨大,一度自信心膨胀…然而在学习OC时,相关的深入的书籍有些缺乏,只能通过零零散散的博客了解个大概。因此,本系列文章通过查阅OC

2021-07-20 22:16:50 311 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 102

原创 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 754

原创 【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 338

原创 老司机带你探究NSScrollView的滚动原理

本文主要讲述如何实现可以控制NSScrollView滚动的Slider,借此来探究、深入理解NSScrollView滚动的原理,最终实现的Demo如下:接下来,我将通过以下四部分来由浅入深的探究NSScrollView。一、NSScrollView的结构。当我们通过Interface Builder将一个NSScrollView拖拽至某个ViewController时,整个NSScroll...

2018-10-18 14:46:25 1993

原创 RegexKitLite的介绍、安装与使用

一、介绍在Mac开发过程中,很多时候我们需要用到正则表达式,然而Cocoa中的正则表达式的使用不是那么顺手,我们可以使用第三方库来实现正则表达式,而强大的第三方正则表达式库RegexKitLite,恰好能满足我们的需求。二、安装安装过程如下:1、打开RegexKitLite官网。网址在此:http://regexkit.sourceforge.net/2、Download。...

2018-10-17 09:30:28 889

原创 理解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 466

原创 NSBundle介绍

bundle是一个目录,其中包含了程序会使用到的资源. 这些资源包含了如图像,声音,编译好的代码,nib文件(用户也会把bundle称为plug-in). 对应bundle,cocoa提供了类NSBundle.我们的程序是一个bundle. 在Finder中,一个应用程序看上去和其他文件没有什么区别. 但是实际上它是一个包含了nib文件,编译代码,以及其他资源的目录. 我们把这个目录叫做程序的m...

2018-10-12 18:42:28 2347

转载 Mac OS X下实现矩形部分圆角

问题在进行今天的内容之前,首先我想问一个问题:下图中,蓝色选择框与红色选择框除颜色、大小外有何不同?(我会在后文揭晓答案)目标本文今天要讨论的是:在Mac OS X下,如何实现矩形的部分圆角。比如这样:或者这样:解决方案要想实现上图样式,有两种解决方案。方案1:蠢萌描点法蠢萌描点法实现图2的原理图如下:如上图所示,首先确定整个矩形的的几个特殊点,然后通过CGContex...

2018-09-27 10:59:31 1255

原创 【已解决】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 3711

原创 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 1200

原创 WordPress插件学习笔记(一)

Part 零:前言假设我们需要一个具有这样功能的插件:将评论信息保存至txt文件内.那么需要做以下步骤的事情:Part 一 :基础信息/*Plugin Name: gxd_commentPlugin URI: http://gaoxiaodiao.comDescription: 评论加强,记录评论信息至txt文件.Author: 高小调Version: 1.0

2018-04-19 22:35:04 302

原创 C语言课设:中缀表达式转后缀表达式并求值(续)

前天看到有人给我很久之前写的一篇博客《C语言::将中缀表达式转换为后缀表达式并计算结果》指出了一个BUG.今天闲的没事,就把BUG修复一下,一看那代码写的,不忍直视,那个BUG更是让我啼笑皆非...这就是传说中的成长吧!看过去的自己总觉得像个傻逼-----------------------------------------------------------------------

2016-11-20 10:49:15 7489 1

转载 C语言::模拟实现strcat函数

题目要求编写一个C语言程序模拟实现strcat函数.(我们不妨先模拟实现一下strcat函数,然后再对照一下string.h库函数中strcat函数代码的实现,与大师肩并肩.)算法分析strcat函数功能:将两个字符串连接起来,最终返回连接后字符串的首地址.strcat函数原型:char *strcat(char *dest,const char *src);我们清楚地了解

2016-08-07 12:49:33 2750

原创 C语言::模拟实现strlen函数

题目要求编写一个C语言程序模拟实现strlen函数.算法strlen函数功能是计算字符串中字符的个数.(除\0外)而字符串本身就是一个字符数组,只不过末尾以\0结束.因此,我们只需遍历除\0之外的所有字符即可.有三种方法可以解决这个问题.算法总结方法一:设置一个整型计数器,遍历字符串.方法二:通过不断函数自身的递归.方法三:与方法一类似,设置一个char*变

2016-07-31 18:37:28 2181

原创 C语言::打印100-200之间的素数

题目要求编写一个C语言程序,要求打印100~200之间的素数算法分析在C语言程序中,我们要想打印100-200之间的素数,首先我们得判断该数是不是素数.判断素数的算法,有位大神写过这样一篇文章,我就不在详细赘述了。求质数算法的N种境界在此,我仅简单的总结归纳一下.算法总结境界一:假设要判断n是否为素数,就从2一直试除到n-1.境界二:从2开始一直试除到n/2.

2016-07-08 17:09:53 2752

原创 C语言::验证花括号成对出现

算法总结判断左右花括号是否成对出现需要两个条件:1.左右花括号数目必须相等.2.当右花括号出现时,左花括号数目必须大于右花括号.具体分析,请看C语言::验证花括号成对出现基础版#includeint main(){ //定义一个整型变量用来接收控制台数据 int ch = 0; //定义一个整型变量用来计算左花括号数目 int le

2016-07-07 14:15:54 3166

转载 求质数算法的N种境界

★引子  前天,俺在《俺的招聘经验[4]:通过笔试答题能看出啥?》一文,以"求质数"作为例子,介绍了一些考察应聘者的经验。由于本文没有政治敏感内容,顺便就转贴到俺在CSDN的镜像博客。  昨天,某个CSDN网友在留言中写道:老实说,这个程序并不好写,除非你背过这段代码如果只在纸上让别人写程序,很多人都会出错但是如果给一台电脑,大多数人都会把这个程序调试正确出这个题目没啥

2016-06-29 23:42:03 2966

原创 那些年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 2636 2

原创 C语言::简单排序之插入排序

插入排序.....我先假设你不会插入排序,因此先从算法讲起。我知道在这么多读者中,一定会有读者抬杠说,我会插入排序算法。好吧,那我就假设你会插入排序算法,但是不会写代码;可能还有一小部分读者会继续抬杠说,我会插入排序算法,我也会写代码。那就请你按下键盘上Ctrl+F4,有惊喜哦!        一、插入排序之算法插入排序就是取出一个数字,将它插入对应的位置。这么说就太无聊了,于是乎下面我举

2016-06-07 17:16:12 2825

原创 将Ubuntu 14.06配置成Web服务器

上学期干的事了,但还是有些不完善,今天补完!一、在Ubuntu中安装Apache2(其他linux系统类似)在安装Apache2之前,我们首先更新系统:apt-get update(解决apt-get找不到软件包的问题 )更新完系统之后,我们就可以开始安装Apache2了:首先在终端输入:apt-get install apache2 //不要以为安装完

2016-06-05 18:17:14 3284

原创 C语言::将中缀表达式转换为后缀表达式并计算结果

百度上都是算法,没找到代码,于是顺手就写了一个出来........

2016-06-03 14:51:53 10053 4

原创 Hello World!

<?php echo "CSDN的第一天!";?>

2016-06-03 11:32:38 2130

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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