ios底层原理:OC对象
一、OC对象的本质oc的对象占多大内存空间?
答案是16个字节,为什么是16个,一个oc对象内部只存放了一个isa指针,而在64位系统中,一个指针占据的空间是8字节,但是为了字节对齐,最小的内存空间分配为16个字节。
oc的对象,是由类创建的,类在oc里面是Class,那么Class的本质是什么?实际上class是由c的结构体构成的。**参阅runtime中的objc.h文件可知,**具体实现如下
12345678910111213141516struct objc_class { Class _Nonnull isa OBJC_ISA_AVAILABILITY;#if !__OBJC2__ Class _Nullable super_class OBJC2_UNAVAILABLE; const char * _Nonnull name OBJC2_UNAVAILABLE; long version ...
xcode自动打包实践
1、问题背景公司是家小公司,没有成熟的打包系统,开发完app之后,往往需要开发人员用xcode打包,导出ipa文件,然后手动上传到蒲公英网站,然后把下载二维码发送给测试/老板。这里面有问题
占用开发人员的时间和设备。
不能保证每天都有可用的测试包,依赖开发人员打包。
重复工作,每天都要做,效率低下。
2 、解决方案可以利用脚本对xcode进行打包,然后发布上传到相应的平台。
这里面,核心的功能是xcodebuild,利用这个命令行工具,可以对工程进行打包,导出。流程图如下
3 、脚本文件12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811 ...
Hexo使用手册
Hexo手册
1.启动本地调试服务器1hexo server
2.新建文章1hexo new '文章标题'
3. 静态文件生成1hexo generate
4. 文章发布1hexo deploy
5.图片放置将用的图片放置到 “文章标题”/ 文件夹下面
使用的时候
1![](文章标题/图片.jpg)
如何在iOS9系统中使用Universal Link
概述 在ios9系统中,可以通过类似打开网页的方式,通过http协议打开app。通过一个唯一的网址,可以指到app内部的一个特定的view。而不用再使用scheme。设想一下,如果twitter使用了Universal Link,如果你点击了一个twitter的链接。你的设备直接打开twitter app内相应的页面。而不是打开一个普通的网页,然后再通过这个网页打开twitter,这种体验将是非常平滑,且对用户来讲,也节省了很多不必要的操作。
功能 使用Universal Link 能让你的App做到,通过点击一个网址,打开你的app,并跳转到对应的页面。
准备工作 实现Universal link 并不难,但是你必须遵从一些条件。下面是需要准备的清单。
序号
条件
e.g.
1
注册域名
www.domian.com
2
可以SSL访问你的域名
支持SSL方式进行文件访问
3
能够上传一个Json文件到你的域名
apple-app-site-association
4
系统版本
ios9+
5
开发环境
Xcode7+
...
关于Runtime的一些理论和实践
前言网上讲解Runtime的教程非常之多,有些讲的还算不错,有些感觉就是人云亦云,所以读者就应该好好甄别下学习的资料。我在本文的最后,会列出一些我认为讲的不错的参考资料,以供参考。接下来就进入正文
正文理论部分基础中的基础 假设看官有一定的数据结构知识,知道什么叫结构体,因为接下来我要讲述的这个东西就是从结构体开始的。如果有不懂的同学请走这里传送门
iOS中Class的定义如下
1234567891011121314151617181920struct objc_class {//class 的结构体 Class isa OBJC_ISA_AVAILABILITY;//class的isa指向的是元类,元类的isa指向的是根元类。#if !__OBJC2__ Class super_class OBJC2_UNAVAILABLE;//父类指针 const char *name OBJC2_UNA ...
CoreGraphicsAndAnimations(2)
绘图(2)图层合并及Flower生长动画图层合并图层的合并说起来很高大上,其实实际上在IOS里面实现非常的简单,实现原理就是,先获取当前的图片绘图上下文,将当前view的layer渲染到当前的绘图上下文,之后从当前的上下文中获取图片,最后结束当前上下文。返回获取到的图片
可能看代码更直观些。
注:这是一个view的category方法
12345678910- (UIImage *)cy_compositedView{ UIGraphicsBeginImageContext(self.bounds.size); [self.layer renderInContext:UIGraphicsGetCurrentContext()]; UIImage *compositedImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return compositedImage; }
Flower 生长动画flower的生 ...
CoreGraphicsAndAnimation(1)
绘图成品展示
UIBezierPath说到绘图,那么有一个不得不讲的对象,那就是UIBezierPath。先来看几个UIBezierPath里面比较重要的API。我都已经做了注释,功能还是比较强大的。
123456789101112131415161718192021+ (instancetype)bezierPath;//创建贝塞尔曲线+ (instancetype)bezierPathWithRect:(CGRect)rect;//获取矩形的贝塞尔曲线+ (instancetype)bezierPathWithOvalInRect:(CGRect)rect;//获取矩形框内椭圆的贝塞尔曲线+ (instancetype)bezierPathWithRoundedRect:(CGRect)rect cornerRadius:(CGFloat)cornerRadius; //圆角贝塞尔曲线+ (instancetype)bezierPathWithRoundedRect:(CGRect)rect byRoundingCorners:(UIRectCorner)corners cor ...
hexo本地图片放置问题
(转) 原 文 地 址
起因在 hexo 中使用本地图片是件非常让人纠结的事情,在 markdown 里的图片地址似乎永远无法和最后生成的网页保持一致。
这些问题使得我一度不愿意使用本地图片而选择用图床,但被移动运营商无耻的横条广告逼得打算上 https,图床只支持 http 就成了问题。
hexo 下插入图片现在大概有几个方案
放在根目录
早期大部分的方案是把图片放在 source/img 下,然后在 markdown 里写 ![img](/source/img/img.png) 。显然这样在本地的编辑器里完全不能正确识别图片的位置。
asset-image
在 hexo 2.x 时出现的插件,后来被吸纳进 hexo 3 core ,用法的介绍见 资源文件夹 | Hexo 。比较尴尬的是,这种方法直接放弃了 markdown 原来的语法,使用类似 ``的语法,。markdown 本来有插入图片的语法不好好支持,专门用一个新的语法来插入本地图片,让我这种强迫症不太能接受。
解决方案CodeFalling/hexo-asset-image
首先确认 _con ...
CAReplicatorLayer探究
概述
这个layer干什么用的?
这个layer如何用?
何种场景适合这个layer发挥?
带着这些问题,我们上路,开始研究它。
苹果官方demo
这个是我搜到的苹果对CAReplicatorLayer讲述功能时,使用到的demo,有没有吊炸天的感觉,但是实际上,我要告诉你的是,实现这样一个功能使用的代码不超过300行。
干什么用? 说实话,其实这个layer很偏门,基本上很少有人会用到它,它的主要作用是用来复制任意数量的它的sublayer的,sublayer是它复制的源头,如果没有sublayer那么是复制不了的。复制的方式,可能是几何变换、时间控制、颜色变换。
使用CAReplicatorLayer对象可以通过一个图片源构建复杂的布局,而仅仅是通过坐标转换、颜色转换、时间转换。
如何使用
基础使用
多说无益,看代码吧
123456789101112131415161718192021222324252627282930313233343536373839404142434445- (CAReplicatorLayer *)xReplicato ...
iOS开发中遇到的同步机制
今天主要是来讨论下,线程同步机制的问题。说到线程同步,一般人可能会想到“NSLock”、“@synchronized”、“GCD信号量”等等,好吧,其实这是我想到的,然而我要说的是,如果在面试中只答到这么几个可是远远不够的。所以我查找了下资料,这才发现原来ios中线程同步的方法可足足有将近10种,且听我娓娓道来。
各个锁进行1000000此的加锁解锁的空操作时间如下
123456789OSSpinLock: 46.15 msdispatch_semaphore: 56.50 mspthread_mutex: 178.28 msNSCondition: 193.38 msNSLock: 175.02 mspthread_mutex(recursive): 172.56 msNSRecursiveLock: 157.44 msNSConditionLock: 490.04 ms@synchronized: 371.17 ms
NSLock 提到NSLock,首先要提另外一个名词叫NSLocking,这是一个协议,主要就定义了俩个方法,一个叫 lock,一个叫unLo ...