
iOS开发
浅浅青丘
动手是解决问题的最好方法。
展开
-
iOS 中block的循环引用问题
开发中经常使用weakSelf和strongSelf来解决block的循环引用问题,但是是不是所有的block都会导致循环引用呢?显然不是的,那么怎么判断调用一个带有block方法时是否会造成循环引用呢,我们来分析一下。首先我们来写一个含有block的类,并调用自己,然后在外部实现这个block,来测试什么情况会出现循环引用。@interface ALDTestBlockModel ()@...原创 2018-12-20 15:30:26 · 926 阅读 · 2 评论 -
iOS阿里云对象存储 OSS文件的上传/下载的实现
之前的项目中,图片语音等资源文件都是直接上传数据流给服务器,然后服务器进行处理和存储。最近的这个项目,服务器直接开的OSS,然后客户端直接使用阿里云提供的上传下载功能来上传和下载资源。 阿里云对图片的处理做的很到位,尺寸在获取图片时可自定义。 首先在项目中导入阿里云OSS的库,直接在pod中加上如下代码:pod 'AliyunOSSiOS'如果不是用pod的话,可点击此链接前往下载:h...原创 2018-06-21 13:48:22 · 12767 阅读 · 2 评论 -
iOS中定义@property时常用的修饰词介绍
iOS编程中,定义成员变量常用格式如下:@property (nonatomic, strong) UILabel *label; 常用的修饰词有atomic,nonatomic,copy,assign,strong,weak,readonly,readwrite等。面试中也会常常被问到这些修饰词的含义及其之间的区别,其本质就是iOS的内存管理,下面会详细介绍每个词的特性和它们的区别,...原创 2018-06-13 16:19:59 · 1047 阅读 · 0 评论 -
iOS中用strong和weak来修饰成员变量的对比
对于纯代码布局,用@property声明成员变量时,我是很自然的用strong来修饰的。然后突然有人问我用weak来修饰可不可以,我第一反应是不可以,因为用weak来修饰,初始化过后就会被释放掉,就算我第一句写了初始化的方法,立即执行addSubView也是没办法将其添加上去的。xcode也给出了很明确的警告:Assigning retained object to weak variable; ...原创 2018-06-12 17:14:45 · 3862 阅读 · 0 评论 -
iOS 含tableView的ViewController基类的实现
上篇博客写了ViewController的基类的实现,这篇博客主要写在BaseViewController的基础上实现一个含tableView控件的基类的实现,主要给包含tableView的页面来继承。 BaseTableViewViewController.h代码:#import "BZBaseViewController.h"#import "BZBaseTableViewCell.h...原创 2018-04-10 16:20:38 · 1907 阅读 · 0 评论 -
iOS UIViewController基类的实现
继承是面向对象编程语言的三大特性之一,写好基类会给App的开发带来极大的方便。在iOS开发中,一般一个页面就对应一个ViewController,ViewController在开发中用的也很多,写一个好的ViewController的基类,会让开发变得轻松很多。 可以写一个BaseViewController,继承自UIViewController,在这里可以实现一些整个项目里ViewContr...原创 2018-04-10 15:42:02 · 3614 阅读 · 0 评论 -
iOS 控件截图、MP4格式视频流和m3u8格式视频流截取某一帧功能的实现
最近开发遇到一个点击按钮实现直播视频流截屏的功能,去网上查了一下资料,总结了一下iOS中截屏相关的知识,然后自己做了个demo。 demo主要实现了3种截屏方法,分别对应三种不同的应用场景。 1、imageView截图,这个截图方法可以用来实现截取项目中的控件,可截取的控件可包括UIImageView、UIView等。截图方法如下:-(UIImage *)screenshotsWith原创 2018-01-12 17:16:16 · 3235 阅读 · 0 评论 -
iOS开发编码规范小结
规范编码可以提高代码的可读性,降低维护成本。作为一个程序员,要对自己写的代码负责,虽然bug无可避免,但是写代码时最基本的编码规则还是应该遵守的,否则不是坑自己就是坑别人,因为代码肯定是要维护的。 下面我主要讲一下从建项目到开发写代码时应该注意的一些地方和自己的一点建议。项目名称:项目名字的英文或者拼音全拼形式(如果比较长也可以选择缩写),建议每个单词或者拼音的首字母都大写。Bundle原创 2018-01-24 15:32:56 · 315 阅读 · 0 评论 -
浅谈App开发iOS端的架构设计
本文将要讲的架构设计可能没有那么真正的架构那么准确,可以理解为在创建App时项目的一个目录结构吧。 做iOS开发3年,其实深刻的架构设计感觉还谈不上,主要是现在接手了一套架构比较牛的代码,然后回头看了一下自己之前的App架构,觉得豁然开朗了很多。在这里主要总结分享一下我自己写过的比较渣的架构,希望大家以此为鉴! 第一份工作的第一个App,那个时候知道的架构也只有MVC模式,但是可能理解的也不是原创 2018-01-24 12:55:58 · 6708 阅读 · 2 评论 -
iOS多线程理论
pthread 特点: 1)一套通用的多线程API 2)适用于Unix\Linux\Windows等系统 3)跨平台\可移植 4)使用难度大 使用语言:c语言 使用频率:几乎不用 线程生命周期:由程序员进行管理NSThread 特点: 1)使用更加面向对象 2)简单易用,可直接操作线程对象 使用语言:OC语言 使用频率:偶尔使用 线程生命周期:由程序员进行管理GCD 特原创 2017-10-18 11:29:47 · 330 阅读 · 0 评论 -
【iOS】浅拷贝和深拷贝
浅拷贝和深拷贝浅拷贝即指针拷贝,可以认为是给一只狗加了一条绳子;深拷贝不但拷贝了对象的指针,还在系统中在分配了一块内存用来存放拷贝对象的内容,可以认为是产生了一条带绳子的新狗。即浅拷贝是两根绳子一条狗,深拷贝是两根绳子两条狗且每只狗对应各自的绳子。图示: 深浅拷贝取决于拷贝后的对象是不是和被拷贝对象的地址相同,如果不同,则产生了新的对象,即为深拷贝。如果不同,则只是指针拷贝,相当于re...原创 2018-06-14 11:23:13 · 293 阅读 · 0 评论 -
UIViewController的生命周期
-(void)loadView;loadView方法在UIVIewController的view被访问且为空的时候调用。loadView方法不应该直接被调用,而是由系统调用。它会加载或创建一个View并把它赋值给UIViewController的view属性。以下代码会导致死循环:-(void)loadView{ NSLog(@"ViewController loadV...原创 2018-06-15 10:58:30 · 563 阅读 · 0 评论 -
iOS中FMDB的使用
在iOS开发中,如果本地需要做大量的缓存,FMDB用的是比较多的,怎么集成到项目中我这里就不说了,主要说一下FMDB使用的一个思路和自己遇到的坑。在我自己开发聊天系统的时候,我一般是用FMDB用来缓存最近联系人列表和用户的聊天消息列表。因为聊天系统,涉及到的读和写比较频繁,所以我会封装一个单例类用来处理每个部分的数据存储和读写。下面是用来管理最近联系人缓存的功能实现,其余的模块也可以按照这样的...原创 2018-11-11 19:52:50 · 2954 阅读 · 2 评论 -
GCD常用方法及应用场景
开发过程中,出现耗时操作造成界面卡顿是常见的问题之一,问题原因就是因为耗时操作阻塞了主线程,所以要解决这类问题最简单的就是引进子线程,将耗时操作移出主线程,耗时操作完成后回到主线程中更新UI。 之前在做一个通讯录的时候,由于需要自己进行排序,所以第一次时需要将几千条的数据都拉下来然后处理,这是非常耗时的,直接放在主线程中网络请求然后各种处理数据会让界面卡死3到5秒。后来使用GCD的并发队列异步处...原创 2018-08-30 15:44:42 · 2104 阅读 · 0 评论 -
iOS中主队列的同/异步执行
主队列是主线中的一个串行队列,通常我们刷新UI都会回到主队列。下面我们来看一下主队列同步执行和异步执行会产生什么样的效果。主队列,异步执行//主队列+异步执行//不会开启新的线程,任务顺序执行-(void)test5{ NSLog(@"主队列+异步执行"); //global_queue 主队列 dispatch_queue_t queue = dispat...原创 2018-08-30 13:26:58 · 2989 阅读 · 2 评论 -
多线程中队列和同/异步执行问题
队列分为并行队列和串行队列,执行方式分为同步执行和异步执行,那么组合一下就有四种方式,下面我会用GCD来验证和总结一下各个组合的特性。并发队列,同步执行//并发队列+同步执行//不会开启新线程,任务顺序执行-(void)test1{ NSLog(@"并发队列+同步执行"); //DISPATCH_QUEUE_CONCURRENT 并发队列 dispatch...原创 2018-08-30 11:47:28 · 1862 阅读 · 0 评论 -
iOS使用UIScrollView实现图片循环滑动的思路解析
一组图片循环滑动在开发中经常用到,App的欢迎页、广告banner等等都会用到。成熟的第三方也比较多,个人用的比较多的是JCTopic,这个很轻量级,代码也不多,用起来也是比较方便。 看过源码之后整理了一下实现的思路和原理,我们先来分析一下我们要实现的这个功能——图片循环轮播,看到这个需求我们想到的就是一组图片能够左右滑动,并且无限循环。 要实现这个功能,我们肯定需要一个可滑动的view,那么...原创 2018-07-11 16:46:00 · 3533 阅读 · 0 评论 -
iOS开发iPhone竖屏icon尺寸与启动页尺寸汇总
我比较喜欢在TARGETS的General中设置icon和启动页,也就是如下图的地方: 可能很多人喜欢用LaunchScreen.xib来设置启动页,但是只设置一个的话,可能图片的大小很难适配所有的尺寸。我比较喜欢用Assets来设置,每个系统给对应的尺寸。 下面是我汇总的尺寸,按照所给的尺寸来切图,icon和启动页可以正常显示。icon尺寸: 40x40 60x60 58x5...原创 2018-07-03 17:03:57 · 1964 阅读 · 0 评论 -
Swift Mark的使用
在用Objective-C开发iOS的时候,常常用到#pragma mark -,使用Mark可以让代码看上去整洁,提高了代码的可读性。 最近开始写Swift,发现不能再这样写了,这样写直接报错。Swift下的Mark://MARK:-阅读代码时,我习惯先看每个类中的方法,只要方法名不是乱起,一般看完方法名基本知道这个类主要是干什么以及它的实现逻辑,所以加了Mark能让代码更清晰,这...原创 2018-07-09 16:14:59 · 3599 阅读 · 0 评论 -
iOS自定义表情的实现
现在很多App都有自己的自定义的表情,客户端可能要实现自己定表情的选择、发送和显示,这里我介绍一种简单的自定义表情的实现思路和代码。 以下介绍基本可以实现聊天中对自定义表情的需求,可结合下图来理解: 资源准备:自定义表情图片的命名。每个自定义表情的意思。emtionMeans.plist:key–表情选择器每个表情对应的tag值,value–每个表情的意思。emtions.pl...原创 2018-06-20 16:32:27 · 4620 阅读 · 0 评论 -
iOS几种动画效果的实现
做过一个项目,里面涉及到的动画效果比较多,在这里做个小小的总结。直线动画效果实现一个物体在某段时间从一个点移动到另一个点。 效果如下: 动画相关代码如下: 动画模型:@interface AnimationModel : NSObject@property(nonatomic,strong) NSArray * images;@property(nonatomic,as...原创 2018-06-19 17:18:40 · 21887 阅读 · 1 评论 -
xcode安装包大全
不希望直接更新xcode的可以选择直接下载xcode的安装包,安装包下载地址为:(https://developer.apple.com/downloads/)。 下载到电脑上之后可以让电脑有两个xcode,哪个好用用哪个 ^~^原创 2017-09-21 13:13:58 · 20417 阅读 · 0 评论 -
iOS UIView的圆角加阴影效果的实现
最近项目的界面都要改成卡片的形式,即需要投影的效果,还要削出圆角,我们都知道削圆角一般有两种方式,一种是直接用layer.cornerRadius来设置,我们知道的一般都是下面两行代码一起使用来实现圆角:self.layer.cornerRadius = 10;self.layer.masksToBounds=YES;但是只要self.layer.masksToBounds=YES;有这句,投影的原创 2017-09-11 22:30:00 · 24649 阅读 · 0 评论 -
iOS APNS 推送相关博客
APNS 相关博客如对apns相关概念不清楚,可参考以下几个博客:(博客中部分内容重复,但总体来说,通读一遍,还是大有裨益的) http://cshbbrain.iteye.com/blog/1859810 =》IOS 基于APNS消息推送原理与实现(JAVA后台)http://www.cnblogs.com/qq78292959/archive/2012/07/16/2原创 2016-06-22 12:28:13 · 471 阅读 · 0 评论 -
iOS单元测试
由于只是一些简单实用的东西,学学还是挺不错的。其实单元测试用的好,开发起来也会快很多。单元测试对于我目前来说,就是为了方便测试一些功能是否正常运行,还有调试接口是否能正常使用。有时候你可能是为了测试某一个网络接口,然后每次都重新启动并且经过很多操作之后才测试到了那个网络接口。如果使用了单元测试,就可以直接测试那个方法,相对方便很多。 比如由于修改较多,我们想测试一下分享功能是否正常,这时候就有用了转载 2017-04-15 16:29:37 · 375 阅读 · 0 评论 -
AFNetWorking 网络错误码大全
NSError codes in the Cocoa error domain.enum { NSFileNoSuchFileError = 4, NSFileLockingError = 255, NSFileReadUnknownError = 256, NSFileReadNoPermissionError = 257, NSFileReadInvalidF原创 2017-05-22 22:23:42 · 5291 阅读 · 0 评论 -
横向分页滚动的UICollectionView,cell左右排版
做IMl聊天,实现自定义表情功能的时候,需要实现微信聊天时那样的表情排版,主要要实现collectionView能横向滑动cell左右排版。默认的cell排版方向是跟随滚动方向的,例如竖向滚动的话,cell的排版是从左到右、从上到下;横向滚动的话,cell是从上到下、然后从左到右。那么要实现collectionView横向滚动,cell从左到右、从上到下的排版,只需要自定义重写下collectio原创 2017-06-12 19:00:00 · 8231 阅读 · 0 评论 -
在子线程中初始化地图会出现的警告以及解决方法
项目中用到高德地图定位,每次登录之后和当app进去前台时,我都会调用一下更新位置。为了不卡主线程,我就把这个操作放在了子线程,然后用的是自己封装的一个地图类来进行位置的更新。一开始代码是这样写的:然后控制台总会出现以下的警告:最后我是把map的初始化拿到了子线程外面,然后消除了警告。原创 2017-06-13 16:19:54 · 515 阅读 · 0 评论 -
iOS系统导航栏设置leftBarButtonItem和rightBarButtonItem的位置
我们都知道在使用系统导航栏的leftBarButtonItem和rightBarButtonItem的时候,我们自己给的位置坐标是没有用的,这两个按钮是系统定义好的,位置也是定义好的。那么我们会发现,如果直接使用系统的leftBarButtonItem和rightBarButtonItem,他们距离屏幕边缘的距离是很大的,效果图如下: 这样的效果有可能觉得离得屏幕边缘太远了,更多的可能希望效果原创 2017-08-17 14:52:21 · 11046 阅读 · 0 评论 -
删除项目中的storyboard
换工作接手一个项目,据说第一个版本是让外包做的,然后再是与我交接的这个开发者来继续维护开发的。交接者说他那时候拿到外包的项目的时候里面全是storyboard的,后来他把能改的都改了,但是还是留下了启动的那一部分弄不好,说是删除就报错,还改不好。 入职一个月的我,之前都忙着加新功能,今天终于有时间好好看看了。先打个包备份下,怕搞不定好直接用。一打包看到包的大小居然有1.09G,What????!!原创 2017-08-19 23:32:20 · 631 阅读 · 0 评论 -
AFNetworking怎么post x-www-form-urlencoded类型的数据
最近接手一个项目,看到网络请求那一块很奇怪,具体情况见下面的截图: 然后发现项目里,只要带参的请求都是用的方法三发起的,不带参的都是用第二个方法发起的,第一个方法是我自己拿来测试的。 由于我之前都是用第二个方法发起post请求的,而且第二个方法一般都是用来上传文件和图片的,感觉很奇怪。 经过多方查找和调试,才知道我们服务器的content-type只支持post x-www-for原创 2017-08-23 11:25:47 · 7117 阅读 · 2 评论 -
iOS白名单和系统权限的配置
iOS 9后用到第三方时需要将在“Info.plist”中将要使用的URL Schemes列为白名单。常用第三方白名单,在“Info.plist”里增加如下代码:<key>LSApplicationQueriesSchemes</key> <array> <!-- 微信 URL Scheme 白名单--> <string>wechat</string> <string>we原创 2017-08-24 10:37:13 · 2018 阅读 · 0 评论 -
iOS 系统图片详解
iOS 获取图片有三种方法1 直接调用摄像头拍照2 从相册中选择3 从图库中选择UIImagePickerController 是系统提供的用来获取图片和视频的接口;用UIImagePickerController 类来获取图片视频;大体分为以下几个步骤:初始化UIImagePickerController 类 设置UIImagePicke转载 2016-04-15 11:16:39 · 777 阅读 · 0 评论 -
Xcode删除证书和清理编译项目产生的缓存
1???Xcode??????provisioning profile ??Finder??????~/Library/MobileDevice/Provisioning Profiles???????????????2???Xcode??????????? ??Finder??????~/Library/Developer/Xcode/DerivedData???????原创 2016-03-18 16:36:12 · 2857 阅读 · 0 评论 -
初识Runtime之KVO实现原理
Runtime运行时是在iOS代码运行时将其翻译成对应的C语言程序。 Runtime 运行时是苹果提供的一个API,属于一个C语言的库。那么在iOS开发中,Runtime运行时有什么用呢? 1. 利用Runtime运行时,在程序的运行过程中,动态创建一个类。 2. 利用Runtime运行时,在程序的运行过程中,动态修改一个类的属性/方法。 3. 利用Runtime运行时,遍历一个类的所原创 2017-09-18 19:10:01 · 1327 阅读 · 0 评论 -
iOS9 无法加载http网络请求的问题
在Info.plist中添加NSAppTransportSecurity类型Dictionary。在NSAppTransportSecurity下添加NSAllowsArbitraryLoads类型Boolean,值设为YES原创 2016-02-19 16:38:42 · 421 阅读 · 0 评论 -
iOS创建系统TabBar
大部分iOS的app都会用到tabBar,创建代码也都差不多,贴出代码,方便写新项目时过来粘贴代码#import "MainTabBarViewController.h"#import "HomeViewController.h"#import "ClassifyViewController.h"#import "ShoppingCartViewControll原创 2016-02-23 13:34:47 · 766 阅读 · 0 评论 -
iOS系统异步请求封装
在iOS开发中,我们经常会遇到网络请求的问题,AFNetworking是一个很不错的第三方库。当然iOS系统也有自己的网络异步请求类——NSURLConnection,虽然每次用的时候都要写代理,但是封装一下之后还是很好用的。封装的这个类除了完成异步网络请求,还加入了MD5的加密以及本地缓存。// HttpDownLoadBlock.h#import @i原创 2016-02-23 13:55:00 · 558 阅读 · 0 评论 -
iOS9 UIAlertController简单使用代码
iOS9 xcode7以后,很多方法都过期了,被新的方法所代替。在这里我主要介绍两个常用的控件——UIAlertView、UIActionSheet被替代的新控件——UIAlertController的使用。一、UIAlertController的UIActionSheet效果时的用法UIAlertController * sheet = [UIAlertControllera原创 2016-02-29 11:14:24 · 1034 阅读 · 0 评论 -
iOS EXC_BAD_ACCESS的本质详解以及僵尸模式调试原理
原文:EXC_BAD_ACCESS的本质详解以及僵尸模式调试原理有时候,你会遇到由EXC_BAD_ACCESS造成的崩溃。 这篇文章会告诉你什么是EXC_BAD_ACCESS,以及它产生的原因。我还会提供一些EXC_BAD_ACCESS错误的解决方案。1. 什么是 EXC_BAD_ACCESS?一旦你理解EXC_BAD_ACCESS的本质,你就会更好地理解这个模糊的名词。这转载 2016-02-29 11:28:41 · 581 阅读 · 0 评论