-
深入研究Block用weakSelf、strongSelf、@weakify、@strongify解决循环引用
前言在上篇中,仔细分析了一下Block的实现原理以及__block捕获外部变量的原理。然而实际使用Block过程中,还是会遇到一些问题,比如Retain Circle的问题。目录 1.Retain Circle的由来 2.__weak、__strong的实现原理 3.weakSelf、strongSelf的用途 4.@weakify、@strongify实现原理一. Retain Circle的由来循环引用的问题相信大家都很理解了,这里还是简单的提一下。当A对象里面强引用了B对象,...…
-
深入研究Block捕获外部变量和__block实现原理
前言Blocks是C语言的扩充功能,而Apple 在OS X Snow Leopard 和 iOS 4中引入了这个新功能“Blocks”。从那开始,Block就出现在iOS和Mac系统各个API中,并被大家广泛使用。一句话来形容Blocks,带有自动变量(局部变量)的匿名函数。Block在OC中的实现如下:struct Block_layout { void *isa; int flags; int reserved; void (*invoke)(void *, ...…
-
给iOS 模拟器“安装”app文件
前言刚刚接触iOS的时候,我就一直很好奇,模拟器上面能不能直接安装app呢?如果可以,我们就直接在模拟器上面聊QQ和微信了。直到昨天和朋友们聊到了这个话题,没有想到还真的可以给模拟器“安装”app!一.应用场景先来谈谈是什么情况下,会有在模拟器上安装app的需求。在一个大公司里,对源码的管理有严格的制度,非开发人员是没有权限接触到源码的。对苹果的开发证书管理也非常严格,甚至连开发人员也没有发布证书,证书只在持续集成环境或者Appstore产线里面,或者只在最后打包上架的人手上。那么现在就有...…
-
手把手教你给一个iOS app配置多个环境变量
前言谈到多环境,相信现在大多公司都至少有2-3个app环境了,比如Test环境,UAT(User Acceptance Test)用户验收测试环境,Release环境等等。当需要开发打多个包的时候,一般常见做法就是直接代码里面修改环境变量,改完之后Archive一下就打包了。当然这种做法很正确,只不过不是很优雅很高效。如果搭建好了Jenkins(搭建教程),我们利用它来优雅的打包。如果利用Jenkins来打包,我们就需要来给app来配置一下多个环境变量了。之后Jenkins分别再不同环境下...…
-
手把手教你利用Jenkins持续集成iOS项目
前言众所周知,现在App的竞争已经到了用户体验为王,质量为上的白热化阶段。用户们都是很挑剔的。如果一个公司的推广团队好不容易砸了重金推广了一个APP,好不容易有了一些用户,由于一次线上的bug导致一批的用户在使用中纷纷出现闪退bug,轻则,很可能前期推广砸的钱都白费了,重则,口碑不好,未来也提升不起用户量来了。静下心来分析一下问题的原因,无外乎就是质量没有过关就上线了。除去主观的一些因素,很大部分的客观因素我觉得可以被我们防范的。根据大神们提出的一套开发规范建议,CI + FDD,就可以帮...…
-
关于IB_DESIGNABLE / IBInspectable的那些需要注意的事
前言IB_DESIGNABLE / IBInspectable 这两个关键字是在WWDC 2014年”What’s New in Interface Builder”这个Session里面,用Swift讲过一个例子。也是随着Xcode 6 新加入的关键字。这两个关键字是用在我们自定义View上的,目前暂时只能用在UIView的子类中所以系统自带的原生的那些控件使用这个关键字都没有效果。 Live RenderingYou can use two different attributes—...…
-
WWDC2016 Session笔记 - Xcode 8 Auto Layout新特性
目录 1.Incrementally Adopting Auto Layout 2.Design and Runtime Constraints 3.NSGridView 4.Layout Feedback Loop Debugging一.Incrementally Adopting Auto LayoutIncrementally Adopting Auto Layout是什么意思呢?在我们IB里面布局我们的View的时候,我们并不需要一次性就添加好所有的constraints。...…
-
WWDC2016 Session笔记 - iOS 10 UICollectionView新特性
前言关于 iOS 10 UICollectionView的新特性,主要还是体现在如下3个方面 顺滑的滑动体验现在基本上人人都离不开手机,手机的app也每天都有人在用。一个app的好坏由它的用户体验决定。在可以滑动的视图里面,必须要更加丝滑柔顺才能获得用户的青睐。这些UICollectionView的新特性可以让你们的app比原来更加顺滑,而且这些特性只需要你加入少量的代码即可达到目的。 针对self-sizing的改进self-sizing的API在iOS8的时候被引进,iOS10中...…
-
WWDC2016 Session笔记 - iOS 10 推送Notification新特性
前言在今年6月14号苹果WWDC开发者大会上,苹果带来了新的iOS系统——iOS 10。苹果为iOS 10带来了十大项更新。苹果高级副总裁Craig Federighi称此次对iOS的更新是“苹果史上最大的iOS更新”。 新的屏幕通知查看方式:苹果为iOS 10带来了全新的通知查看功能,即抬起iPhone的屏幕,用户就能看到目前的通知和更新情况。 苹果将Siri开放给第三方开发者: 现在用户可以让Siri实现更多的功能,例如让Siri向自己的联系人发送微信信息等。目前Siri可以直接支...…
-
iOS如何优雅的处理“回调地狱Callback hell”(二)——使用Swift
前言在上篇中,我谈到了可以用promise来解决Callback hell的问题,这篇我们换一种方式一样可以解决这个问题。我们先分析一下为何promise能解决多层回调嵌套的问题,经过上篇的分析,我总结也一下几点:1.promise封装了所有异步操作,把异步操作封装成了一个“盒子”。2.promise提供了Monad,then相当于flatMap。3.promise的函数返回对象本身,于是就可形成链式调用好了,既然这些能优雅的解决callback hell,那么我们只要能做到这些,也一样可...…