自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 iOS - KVC底层应用

之前简单得讲过一些KVC的用法,但是并不能深入理解KVC内部实现及其原理,下面主要讲下KVC的底层原理。 取值 valueForKey: 在使用KVC取值的时候,使用valueForKey:方法,该方法会返回一个id类型的对象,那么它的内部会怎么处理的呢?现在我们使用该方法: Teache...

2020-03-28 21:30:19 47 0

原创 iOS - 使用clang将Object-C代码转换为C++代码时 'UIKit/UIKit.h' file not found

问题 在MacOS项目下使用clang命令clang -rewrite-objc main.m可以把main.m文件转换成C++文件,方便研究内部实现。但是如果是iOS项目的话执行上面clang命令就会报出下面错误: shiyudeMacBook-Pro:LeaksTest shiyusun$ c...

2020-03-22 23:06:02 80 0

原创 iOS-线程同步的几种方式

在多线程开发中数据的安全是非常重要的,在开辟分线程执行耗时操作以保证主线程不阻塞的同时,数据的安全也要保证才行。如果同一个资源(一个变量或者一段代码或者存储的数据等)同时被多个线程访问修改,可能会造成数据的错乱,得到的也就不是自己想要的结果,所以多线程开发中线程间的同步有时显得尤为重要。 实现多线...

2020-03-16 16:02:43 100 0

原创 iOS - 线程中常见的几种锁

线程锁主要是用来解决“共享资源”的问题,实际开发中或多或少的都会用到各类线程锁,为了线程的安全我们有必要了解常见的几种锁,下面是本人查看一些大牛的博客然后整理的内容,加上自己的一些见解,水平有限,如果不慎有误,欢迎交流指正。 常见锁列举 自旋锁(OSSPinLock、os_unfair_lock...

2020-03-15 21:20:47 178 0

原创 iOS -多线程之pthread

pthread是POSIX thread的简写,一套通用的多线程API,适用于Unix、Linux、Windows等系统,跨平台、可移植,使用难度大的C语言框架,线程生命周期由程序员管理,百度百科上有详细的介绍。在多线程方面iOS有GCD、NSThread、NSOperation,所以开发时pth...

2020-03-12 16:20:52 51 0

原创 Swift - 泛型

泛型是Swift中重要的类型之一,意为不确定的类型。我们知道带有参数的函数是必需要指定参数的类型的,举个例子观察下面有几个同名函数实现相似的功能,但参数类型不同: 一、节点泛型 func methodOne(param:String) { print("\(par...

2020-03-05 16:51:09 38 0

原创 Swift - is(类型转换)和 as(类型转换)

在Swift中一般使用“is”关键字实现类型检查,使用“as”关键字实现类型转换,首先说一个类型层次概念,举个例子,创建一个基类: class Person { var weight:Float init(weight:Float) { self.weight = ...

2020-02-25 19:45:42 207 0

原创 The default interactive shell is now zsh.

Mac-关于升级macOS Catalina后,终端试用问题,每次打开终端都会有一下提示: The default interactive shell is now zsh. To update your account to use zsh, please run `chsh -s /bin/z...

2020-01-17 15:51:02 567 0

原创 iOS-动态方法决议与消息转发机制

在消息发送机制中我们介绍过,OC是动态语言,对象调用方法其实就是对象接收消息,而消息的发送采用“动态绑定”机制,具体会调用哪个方法直到运行时才确定,然后去执行绑定的代码。 绑定的过程: 以下面代码为例 Person *p = Person.new; [p eat]; 方法调用时,编译器会底层将之...

2019-12-10 15:55:51 172 0

原创 iOS-消息发送机制

在Object-C中,方法的调用不再理解为对象调用其方法,而是要理解成对象接收消息,消息的发送采用"动态绑定"机制,具体会调用哪个方法直到运行时才能确定,确定后才会去执行绑定的代码。 OC调用方法的形式如下: Person *p = Person.new; [p eat]; ...

2019-12-08 22:30:42 226 0

原创 iOS-动态添加方法

动态添加方法可以在动态创建的类中添加也可以在已存在的类中添加,先来看下动态添加方法的定义函数: OBJC_EXPORT BOOL class_addMethod(Class _Nullable cls, SEL _Nonnull name, IMP _Nonnull imp, ...

2019-12-07 15:35:45 63 0

原创 iOS-动态添加属性

前一章介绍了动态创建类,这章主要讲动态添加属性。 一、动态添加实例变量Ivar: 通过函数class_addIvar()添加属性,更准确的说是添加成员变量,函数定义如下 OBJC_EXPORT BOOL class_addIvar(Class _Nullable cls, const char *...

2019-12-06 11:26:53 52 0

原创 iOS-动态创建类

在运行时动态创建一个类: 导入头文件#import <objc/runtime.h>,动态添加类,创建一个继承 NSString 的类NSStringSubClass类,如下代码: // 类名也可以直接使用C字符串写法 ”NSStringSubClass“ NSStri...

2019-12-04 13:20:09 83 0

原创 iOS-类和对象之本质

iOS界比较流行的一句话:万物皆对象!为什么会有这么一个说法呢?难道类(class)也是对象(object)?对象其本质又是什么?这些问题在实际开发中或许遇不到,但当真的涉及到底层的开发,就要面对这些问题。想要透析对象的本质,就要了解运行时(runtime),苹果已经将 Object-C runt...

2019-12-02 18:15:59 188 0

原创 iOS-Masonry实现原理

为视图添加约束的方法有很多,可以使用系统原生的约束方法,即NSLayoutConstraint约束类;可以使用storyboard添加约束;甚至使用CGRectGetMaxY(rect)的若干方法为视图布局。这次我们要说的是使用纯代码添加约束,一个轻量级的第三方约束框架Masonry,作者Jona...

2019-11-29 18:41:38 162 0

原创 iOS-instancetype与id的区别以及alloc、init与new的区别

不管是iOS原生方法还是平时自己写方法,都能碰到instancetype和id,那么这两者有何区别呢? 一、instancetype和 id的异同 相同点:instancetype是clang 3.5开始提供的一个关键字,跟id类似,用于表示某个方法返回的未知类型的Objective-C对象。 不...

2019-11-28 17:58:14 132 0

原创 iOS-封装系统通讯录调用

在项目中有的地方会用到获取通讯里面的某个联系人的联系方式,这里我们稍微封装一下这个方法。 第一步:我们需要获取通讯录权限 在info.plist文件中,添加 key : Privacy - Contacts Usage Description,value:方便用户从通讯录选取要保存的号码,如下图:...

2019-11-25 13:26:51 93 0

原创 iOS-雷达数据图

这次简单的写一个关于雷达数据显示的案列,实现简单,主要用UIBezierPath以及CAShapeLayer,如下图: 具体实现: 思路:如何绘制上图中的六边形?我们只需要确定最外层六边形的边长(确定大小)和六边形的中心点的坐标(确定位置)。绘制几层六边形可以随意控制(把边平分几段)。然后添加每...

2019-11-13 13:59:30 103 0

原创 iOS - 添加代码片段(Code Snippets)

添加代码段目的是为了减少敲写重复的代码,xcode原生带有很多代码段,例如for语句、switch语句等,{}表示代码段。 代码段制作: 具体制作代码段也很简单。先选中一段代码,然后右键,选择Create Code Snippet。 参数解释 Title::名称(代码段名称)。 Summar...

2019-09-16 11:55:16 159 0

原创 OenCV - 导入OpenCV遇到的的错误

1、集成 到官网下载opencv2.framework,苹果开发选择iOS pack,自行选择版本,我选则是OpenCV – 4.1.1最新版。下载好之后,拖进项目中即可。 2、报错信息 报错1:enum { NO, GAIN, GAIN_BLOCKS }; Expected identifier...

2019-09-10 18:05:25 99 0

原创 iOS podfile文件exec格式转换

今天从svn上面拉取项目,然后想到项目里面添加一个第三方的库,于是我打开终端,cd 项目路径(把项目拖进终端里面,路径会自动显示出来),执行命令: open podfile 目的是想打开podfile文件,然后添加第三方的名称。但是这时候确报错了,仔细一看原来podfle文件已经变成exec各式...

2019-07-22 15:01:20 298 0

原创 Flutter - 修改应用名称、icon、启动页

虽说Flutter是跨平台开发,但是配置东西的时候安卓和iOS还是要分别配置。 一、修改应用名称 Android: 在android->app->src->main->AndroidManifest.xml 中修改android:label=“xxx” iOS:ios-&g...

2019-06-26 17:11:50 1256 0

原创 Flutter - Android Studio开发Flutter以及iOS真机测试

上一节已经配置好了iOS和安卓的环境,下面我们用Android Studio开发Flutter,当然你也可以用VSCode和ItelliJ IDEA来开发。 一、创建项目 接着上一节操作,打开Android Studio,新建一个Flutter项目,选择Start a new Flutter pr...

2019-06-21 12:24:06 7228 6

原创 Flutter-下载安装Flutter以及移动端环境配置

Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面。 Flutter可以与现有的代码一起工作。在全世界,Flutter正在被越来越多的开发者和组织使用,并且Flutter是完全免费、开源的。下面介绍Flutter的初体验的过程。 一、下载安装 下载地址 ...

2019-06-21 10:12:31 704 0

原创 iOS-MacOS系统升级后出现xcrun: error: invalid active developer path

刚更新完MacOS Mojave(莫哈韦),版本 10.14.5。然后打包提交代码到git,打开终端,平时的正常操作,但是结果确报错了: xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools...

2019-06-20 10:16:28 185 0

原创 苹果开发者技术支持电话方式改变

目前苹果已经永久暂停4006701855中文开发者电话支持。当你再打这个电话的时候会直接语音提示你,让你到 https://developer.apple.com/contact,进入该地址,点击会员资格与账户: 随便选一个点击,会显示下面页面,如果没有电话联系,就再换一个上图的按钮点击。 ...

2019-05-30 14:24:25 1442 0

转载 iOS-马甲包是什么意思?如何制作上传?

马甲包的字面意思给产品穿马甲,但是我认为马甲包更像是产品的一种分身,一种和产品一样拥有灵魂,拥有肉身的一种分身。它能为产品带来同样的功能效果。 iso马甲包是什么意思?如何制作上传?如图所示,喜马拉雅马甲包 一、什么是马甲包 马甲包是利用App store 规则漏洞,通过技术手段,多次上架同一款...

2019-05-28 17:06:06 131 0

原创 Java-MAC查找Java的JDK的路径

打开终端,输入执行命令: /usr/libexec/java_home -V 结果: Matching Java Virtual Machines (1): 1.8.0_191, x86_64: "Java SE 8" /Library/Java/JavaVirtual...

2019-04-08 17:33:48 137 0

原创 IDEA-自带Database中table进行增删改查和筛选数据

显式的数据库有人喜欢用Navicat Premium,在里面对数据进行各种筛选和增删改查操作,用起来很方便。这里我们说下IDEA内部自带的显式的数据库。 这里我已经建好数据库和表,表内数据我也添加了若干条,标注图如下: 1.第一个刷新按钮,故名思议,就是用来刷新表的显示数据,当你在代码中添加向表...

2019-03-14 16:44:42 2978 0

原创 IDEA-Mac下载安装Maven

1.下载 下载地址:https://maven.apache.org/download.cgi 下载选择: 2.安装 我们把下载好的压缩包解压,将其放在适合目录下,我将其放在/usr/local目录下: 放好之后,接下来就要配置环境变量, 看看~/ 目录下面有没有 .bash_profile文件...

2019-03-12 16:45:44 129 0

原创 IDEA-MySQL增删改查操作

Java中提供了丰富的类和接口用于数据库编程,利用这些类和接口可以方便地进行数据库访问和处理。我们常用的JDBC接口和类都在java.sql包中。 1、Connection接口 Connection接口代表与特定的数据库的连接,在连接上下文中进行SQL语句并返回结果。 2.Statement接口 ...

2019-03-08 17:30:33 2978 1

原创 IDEA导入JDBC驱动的jar包

JDBC的全称是Java Database Connectivity,意思就是Java数据库链接,是一套面向对象的应用程序接口,指定了统一的访问各种类型数据库的标准接口。JDBAC是一种底层的API(Application Programming Interface,应用程序接口),是连接数据库和...

2019-03-08 12:01:38 9703 4

原创 Mac IntelliJ IDEA连接和操作MySQL数据库

想要IntelliJ IDEA后台开发,数据库的连接时必不可少的,这里我们选择开源的,同时也是使用人数比较多的一种数据库MySQL。 第一步:MySQL的下载安装 到MySQL官网下载,找到MySQL Community Edition (GPL),这个是MySQL的开源版本,是免费的,而上面的M...

2019-03-06 14:52:31 7285 10

原创 Mac-终端查看/关闭使用某端口的进程

1、查询使用某端口的进程打开终端 打开终端输入: //将Port替换为要查询的端口号(注意端口号前面不要空格) sudo lsof -i :Port 例如: sudo lsof -i :8080 //也可以不用管理员权限(不需要输入密码) lsof -i :8100 回撤后,终端查询结果: C...

2019-01-18 17:27:47 437 0

原创 Swift-字符串截取、替换、插入

Swift中关于字符串的截取与OC还是有很大的区别的,要说字符串的截取,就要先说下“范围”,OC中使用的是NSRange函数来指示一个起始位置和长度,而Swift中的范围使用起来就方便得多,有两种形式: 1...5表示闭区间[1,5],也就是从1到5的范围。 1..&amp;amp;am...

2019-01-18 16:32:33 3226 1

原创 iOS-NSRange使用

NSRange本身是个结构体,里面有两个属性location(起始位置)和length(长度),如下 NS_INLINE NSRange NSMakeRange(NSUInteger loc, NSUInteger len) { NSRange r; r.location = lo...

2019-01-18 10:17:46 281 0

原创 Mac 安装 IntelliJ IDEA 以及激活方法

之前一直在苹果移动端开发,这里想了解下Java后台的开发,以至于更好的配合后台工作,下面说下破解版的安装过程(Mac)。 **第一步:**下载Java开发工具,这里我们选择比较好的IntelliJ IDEA,官方下载地址:https://www.jetbrains.com,我们下载功能比较全的安装...

2018-12-29 11:03:45 1993 0

原创 Swift-桥接Cocoapods pod导入的OC第三方

这里直接说问题,在swift项目中,当你通过Cocoapods pod导入OC的第三方文件,然后你去桥接文件里面添加该第三方的头文件(例如:MBProgressHUD等),你会发现会报错,错误是说没有找到该文件,也就是路径问题,下面直接说解决方法。 解决方法:TARGET -&gt; Bu...

2018-12-04 11:51:31 240 1

原创 iOS-打开本地或下载的Excel文件

刚迭代个项目小功能,打开本地或下载excel文件。打开本地的比较简单,这里只说下载文件并且打开。 主要步骤: 1.判断沙盒里面是否已经存在了文件,没有就下载,有就打开。 2.下载文件,下载完成后打开。 下载文件比较简单,封装一个下载的方法: + (void)downloadExcelFileWit...

2018-11-26 14:26:26 2446 0

原创 iOS-设置新建文件时的默认前缀

今天用Swift创建了一个项目,在创建文件时发现文件名称前缀没有,于是就想去设置一下,结果抬手就给忘了怎么设置的了,今天就把过程记录一下。 我们知道在项目里面创建一个文件时,都会给它添加一个前缀,以保持统一性,也比较美观,通常是以项目的名字缩写或个人名字的缩写来为新建的文件设置前缀,下面介绍下步骤...

2018-11-21 10:57:08 600 0

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