自定义博客皮肤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开发者-Ziank的总结

自己开发过程中的一些总结和经验

  • 博客(34)
  • 收藏
  • 关注

原创 Swift中的weak和unowned关键字

Swift中没有了strong, assign, copy关键字,对于所有的class类型变量都默认采用了strong类型,如果需要指定使用weak,则需要添加weak关键字修饰。 正是由于这种默认的strong类型,在闭包中会引起循环引用,导致内存无法释放,为了能够在闭包(block)中正常释放内存,需要对闭包中的self使用弱引用,也就是不持有self对象。 如下面的代码中:cla...

2018-07-04 15:50:27 940

原创 自动布局中的NSAutoresizingMaskLayoutConstraint

在使用自动布局的时候,如果是自己通过代码直接写的约束(即不通过SnapKit等第三方库或StoryBoard,Xib之类),那么就会出现NSAutoresizingMaskLayoutConstraint的问题。运气好的话,只是弹出warning,不影响实际布局,但是如果像我一样运气不好,就会出现整个页面的布局错乱。 解决该问题的方法也十分简单,就是对每一个view都设置translatesA...

2018-05-31 14:04:13 1344

原创 Swift开发中遇到的注意点(二)

这段时间开发项目的同时在看第三方库Kingfisher的实现,感觉有一些东西也需要记录和总结一下。6. public private(set),public fileprivate(set)这和weak一样是变量的一种修饰,意思是该变量可以public访问,但是赋值是private的,如此设置可以方便许多本来需要readonly的变量的处理。7. DispatchWorkItem这...

2018-04-26 11:14:04 352

原创 Swift开发中遇到的注意点(一)

最近的项目是使用Swift进行的开发,在开发过程中,有一些东西和OC是不太一样的,需要特别的注意,这里也就简单的介绍和记录一下。1. 单例模式在OC中的单例模式一般都是使用dispatch_once来实现的,可是在Swift4中,该方法已经被废弃,也就是说单例模式的实现和之前不再一样。在Swift中,单例的实现是通过静态成员和let关键字来实现的,具体代码如下:class Cl...

2018-04-13 10:29:49 670

原创 巧用阴影实现模糊字体的UILabel

最近,PM提出了一个新的需求,就是要把一个句子中的某些单词给模糊掉,实现提示用户的效果。要求如下图所示:需求图片我一下子能够想到的办法,就是利用UIVisualEffectView进行模糊,或者使用图片进行替换。首先说使用图片的方式,也就是把要模糊的单词做成图片,然后使用NSAttributedString进行显示,乍一看好像可行,实际做的时候发现,由于...

2018-03-29 15:57:00 2075

原创 创建一个带下划线的UILabel

所谓带下划线的UILabel,其实就是文本加下划线,这里我分为三种情况来讨论:文本内容只有一行;则可以在UILabel的下方添加一个新的UIView,作为下划线;文本下方有下划线,可以通过使用UILabel的attributedText属性来进行设置,实现文本下方有下划线的需求;根据UILabel的行数,需要每一行都拥有全行的下划线,也就是类属于填空题的...

2018-03-29 15:56:58 441

原创 Swift中的dispatch_once

我们都知道,从swift3.0开始,dispatch_once被废弃了,而是开始推荐大家使用全局let变量,懒加载的全局变量或者静态成员来完成,但是在extension中,这些方法都会不太合适,因为extension中不支持添加存储类型的属性。首先尝试的方法,就是使用let增加一个属性,然后发现会报错;接着就想到使用懒加载来进行返回,结果还是报同样的错误...

2018-03-29 15:56:54 1519

原创 Android知识小记录(一)

1. WebView的调试模式在Android应用中,可以开启WebView的调试模式,这种模式下,可以使用chrome调试对应的网页代码,更方便我们对WebView的使用。开启方式为:WebView.setWebContentsDebuggingEnabled(true);2. Android Library Module导出aar文件的方式我们在制作Android SDK的时候一般会创

2018-03-29 15:56:49 166

原创 OC中#import 尖括号和引号的区别

在OC中,我们引用一个头文件,可以使用#import "a.h",也可以使用#import <a.h>,那么这两种方式有什么区别呢?和在C/C++中一样,使用""引入的是本地工程的文件,而使用<>引入的是系统库的文件。在使用中,""会先查找用户目录下文件是否存在,或者说是User Header Search Paths,如果不存在...

2018-03-29 15:56:46 2931 1

原创 使用Pinyin4Swift进行汉字拼音转换

由于iOS的系统原生库已经支持了汉字转拼音,所以很多时候我们都可以直接进行转换,但是系统的转换很多时候都存在问题,在需要具体拼音的时候我们一般都会使用第三方库来进行转换。在OC中,我认为Pinyin4ObjC是一个做的不错的库,支持汉字,语句到拼音的转换,而且支持多音字的处理。但不幸的是,该库的作者并没有实现Swift版本。这种情况下,我就自己动手,参考Pinyin4ObjC的代码,做了一个Pi

2018-03-29 15:56:43 703

原创 Kotlin+Databinding如何为布局添加自定义属性

在使用databinding时,我们经常会遇到需要对图片进行自定义的属性添加,以实现网络图片的自动加载和处理,这种处理在jiava中的话在对应的ViewModel中添加静态方法,就可以实现对应的处理,但是迁移到Kotlin之后,你会发现这种方法不好用了,那么我们应该怎么办呢?如下面的布局文件:<layout xmlns:android="http://schemas.android.com/

2018-03-29 15:56:40 898

原创 Swift条件判断中的逗号

在Swift语言中,Bool值是用来进行条件判断的,可以进行&&以及||的操作,从而实现多个表达式共同判断。但是由于Swift中存在可选项绑定,或者说是用let展开可选项的原因,有些地方条件判断中不能够使用&&来进行处理。比如,我们要在变量hasValue确实有值,且参数个数paramCount大于0的时候,执行代码,一般我们可以这样写: if hasValue != nil && para

2018-03-29 15:56:37 1030

原创 Fragment中创建菜单

最近由于工作原因,在开发Android平台的一些功能,有一个地方用到了根据内容修改菜单项的需求。在iOS上可以在读取加载数据之后,直接修改navigationItem,就以为在Android可以同样的操作,结果却出现了menu为null的情况,引发了crash。于是把代码移动到了onCreateOptionsMenu函数中,结果又出现了数据为null的情况,瞬间对于两者的调用顺序迷糊了。今天去

2018-03-29 15:56:34 967

原创 dispatch_group和dispatch_barrier的用法

前天被人问到使用GCD做依赖的用法,结果完全答不上来,下来之后就搜索了一下GCD的高级用法,发现自己对于GCD的掌握还很浅,像dispatch_group和dispatch_barrier的用法居然都不知道。dispatch_group就是用来解决依赖问题的,或者说是用来解决并发序列的顺序执行问题。主要有几个方法,分别是:dispatch_group_t dispatch_group_crea

2018-03-29 15:56:30 881

原创 NSClassFromString的使用

在iOS开发中,有时候也会用到类似反射的情况,就会使用到NSClassFromString,也就是通过字符串获取到类。对于系统类而言,直接使用名称就可以获取到对应的类,如NSClassFromString("UIViewController")可以获取到UIViewController.Type,这样的话,就可以通过获取到的AnyClass对象,进行类型强转之后,调用对应的init方法,生成相应

2018-03-29 15:56:27 1575

原创 如何为圆角添加阴影

在iOS中为UIView添加阴影还是比较简单的,只需要设置layer的shadow属性就可以了,但是问题在于设置阴影之后,必须设置masksToBounds为NO,而圆角图片则要求masksToBounds必须为YES,两者相互冲突,会导致无法正确的添加阴影。正确的做法是先创建一个透明的UIView,并添加阴影,设置masksToBounds为NO;然后...

2018-03-29 15:56:24 737

原创 关于循环引用的特例

前两天程序中出现了一个bug,就是有一个controller一直没有释放,然后重新进入页面时有创建了新的实例,直接导致了在弹出UIAlertController时会弹出多次,只能到代码中查找问题。在代码中搜索self,对应的block中都正确使用了weakSelf,没有任何的block中对有对当前ViewController的强引用;这下问题就麻烦了。无奈就找了同事一起查找代码,最终定位为当点

2018-03-29 15:56:21 182

原创 FMDB的Tip

今天在调试代码的时候,发现有数据库中的一个数据总是获取不正确,导致一个应该为非负数的结果计算为负数,经过单步调试,发现在获取该数据时总是报一个错误:Error calling sqlite3_step (21: out of memory) rs上StackOverFlow搜索了一下,在对比一下代码,终于发现了问题,在循环中把FMResultSet给close了,然后再执行next方法的时候就

2018-03-29 15:56:18 158

原创 iPad横竖屏切换中的注意点

最近公司要搞iPad的竖屏版本,使用了PrimaryOverlay的方式显示左侧的菜单栏,在实际开发过程中很是遇到了一些问题,这里就记录一下吧:设备方向不等于实际方向部分竖屏页面无法旋转到横屏Popover出现覆盖问题关于这几个问题,其实也并没有特别的麻烦,只是一时间会想不到解决思路而已。设备方向问题设备方向不能够直接读取[UIDevice currentDevice]的方向,因为

2018-03-29 15:56:14 1631

原创 iPad使用相机中的一个坑(UIModalPresentationStyle,UIStatusBar)

今天解决了一个相机相关的bug,感觉有些人可能也会遇到,就说一下吧。问题是这样子的,我们应用在用户信息页面,需要支持更换头像,这里需要能够直接从相机获取,同样的代码,在iPhone上没有任何问题,切换到iPad以后,发现照相页面总是会出现statusBar,无论是重写prefersStatusBarHidden函数还是通过[[UIApplication sharedApplication] se

2018-03-29 15:56:11 862

原创 UIAlertController设置自定义的标题和内容

我们知道,UIAlertController的标题和内容都是黑色的,但是在很多场景下都需要修改他们的颜色,比如在输入错误时把提示信息变为红色,或者自定义标题的颜色,可是在公开的API接口中好像并没有对应的方法,那么我们应该怎么做呢?第三方控件第一种方法当然就是使用第三方的Alert控件了,现在Github上有着众多的Alert控件(如SCLAlertVi...

2018-03-29 15:56:08 1449

原创 UIAlertController中的UITextField晃动效果和边框颜色

在iOS8中,我们引入了UIAlertController,通过UIAlertController可以方便的添加文本框进行编辑,但是,在输入错误的内容时,如何对用户进行提醒就成了问题,因为UIAlertController中的所有UIAlertAction都会导致UIAlertController的消失。这里,我就描述两种提示的方法,分别是晃动文本框和修...

2018-03-29 15:56:05 796

原创 iOS 应用提示弹窗

在iOS中要弹出和Android中Toast差不多的提示,并不困难,也有着诸多的第三方库可以使用,但是有些时候我们还是需要自己看一下如何进行实现,比如我们最近的需求,需要在应用进入前台时弹出一个提示,提示中包含有可点击的按钮,那么大部分的第三方库就不支持了。其实这个问题并不复杂,反而非常简单,因为只需要找到最顶层的window,把我们要进行弹窗的UIView加上去就可以了。而获取顶层window

2018-03-29 15:56:02 2639

原创 一张图片说明程序员的时间去哪了

我们总是会评估任务需要的时间,却总是不那么准确,那么时间都去哪了呢,我认为自己下面这张图挺能说明常见的情况。时间去哪了.png

2018-03-29 15:55:59 214

原创 WKWebView的使用(二)

之前讲述了WKWebView对于WKNavigationDelegate的使用,这里说一下剩下的东西。一、 WKUIDelegate的使用​ WKUIDelegate是WebKit对于用户交互的处理代理,它可以使用原生的提示框来代替JavaScript中的提示框,虽然JavaScript中可以做的和原生相似,但是如果有输入的处理的话毕竟还是不如原生的方便。在Delegate中提供了三种提示框的

2018-03-29 15:55:56 225

原创 WKWebView的使用(一)

随着iOS10的出现,大部分应用都已经抛弃了iOS7的支持,那么将UIWebView替换为WKWebView的工作也就提上了日程。毕竟UIWebView的占用内存大,而且存在泄漏问题,包括对js的支持也是不如WKWebView的,所以大部分的UIWebView都应该替换为WKWebView。由于我们的工程对js只进行了简单的支持和调用,并没有太多复杂的交互,这里就不对WKUIDelegate进行

2018-03-29 15:55:54 371

原创 OC&Swift混编的注意点

当前swift正在逐步开始流行,我们也需要与时俱进,但是在项目中又不可能已下载把所有代码进行替换,这就存在了混编的必然性。对于swift和OC的混编,我说一些自己认为需要注意的地方。可选类型:swift中最经典的用法,需要注意的就是如果使用了!,一定不能够为nil,否则将会crash;OC转换时一般会为了简单,把成员变量的类型定义为!,那么一定要注意使用该变量时不可以为空。相互引用:OC

2018-03-29 15:55:50 491

原创 swift利用系统库汉字转换为拼音

在iOS中我们做搜索时一般会遇到通过拼音搜索关键字的情况,这时候我们的判断就需要把中文汉字转换为拼音,有些时候还需要获取汉语拼音的首字母大写缩写,那么我们应该这么做呢?有些第三方库可以完成汉字到拼音的转换,但是系统库也可以支持拼音转换的所以这里就简单介绍一下使用系统库进行转换的方法。增加判断的函数,最好的办法是对String类添加一个extension,代码如下:extension Stri

2018-03-29 15:55:47 1196

原创 浅析block,delegate和NSNotification的优劣

我们知道,在iOS中进行回调的方法主要有三种,分别是block,delegate和NSNotification。那么这三种方法有什么优劣,在不同的场景中又应该使用哪一种方法呢?block首先,我们来说一下block,block也就是代码块,在很多调用中使用block都会使得代码的逻辑更加清晰。block可以不进行命名,或者存储在临时变量之中;所以在只需要调用一次,或者在同一函数内多次调用的地

2018-03-29 15:55:44 215

原创 武侠——另一个洪荒

最近在看一本小说《帝逆洪荒》,写的主要是一个现代人周天穿越到封神时期成为纣王的故事。故事中重新解读了人类的武侠,将之提升到了和仙侠并列的地步。在上古时期,女娲造人,人类开始兴盛。天生道体,人类的发展超越了所有种族的预料,人类诞生了九王二祖五至尊共计十六位混元,成为了洪荒第一大族;尤其是文祖仓颉,想要创造人类文字的他可谓是洪荒第二高手,仅次于道祖鸿钧。鸿钧为了争夺天道控制权,算计了文祖仓颉。仓颉

2018-03-29 15:55:41 263

原创 iOS中如何把UIButton中的图片和文字上下对齐

我们都知道在UIButton中可以设置图片和文字,也经常见到同时设置有图片和下方提示文字的按钮,但是当我自己去对图片按钮添加提示文字的时候,却发现这并不是想象中的那么简单。设置图片和文字如示例代码:func initView() -> Void {var button:UIButton = UIButton(frame: CGRectMake(100, 200, 100, 100))b

2018-03-29 15:55:38 1132

原创 OC&amp;swift中的宏定义

在使用OC和swift进行混编时,我们经常会需要在swift中使用OC中的宏定义,但是这些宏定义经常会提示无法找到或者类型错误,那么我们到底应该怎么做才正确呢?OC中的宏定义和C一样,主要有以下几种情况:OC宏定义定义一个常量值,后面可以方便使用;如 #define TOOLBAR_HEIGHT 44;定义一个不会变化的常用变量值,或者一个较长的对象属性;如#define

2018-03-29 15:55:35 973

原创 UIWebView键盘的accessoryBar隐藏

当前越来越多的iOS应用开始使用html进行交互显示,却会发现在UIWebView弹出的键盘比UITextView的键盘多出了左右移动以及完成按钮,那么如何去掉这些我们并不需要的按钮呢?苹果官方并没有给出方法,所以我们只能够自己来解决。webview_keyboard.png对于不同的iOS版本,我们的处理方法也会不同,因为官方没有提供方法,所有的方法都是需要自己去发现和修改。这里

2018-03-29 15:55:32 899

原创 北邮记

今天又一次在地图上看到了昌平,顺手就滑到了邓庄——那个我大学第一年所在的地方,也是我离开家乡后第一个长期居住的地方。​ 按照当年的路线,从市区德胜门坐919路车可以直接到达邓庄,中间经过了清河,沙河,昌平等地。如今的邓庄和以前有了差别,最大的就是昌平通了地铁,可以做地铁去那里了。​ 在邓庄站下了公交车,向前走20m左右,有一个向右的小巷子,巷子口有着牌子,上面写着“北京交通职业技术学院”,当年

2018-03-29 15:55:26 449

空空如也

空空如也

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

TA关注的人

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