iOS 进阶/学习资源
番薯大佬
码农一枚
展开
-
重构AppDelegate
转载引言:可能很多读者可能都有这样的经历,迭代维护多年的系统代码量激增,有些模块的代码自己都觉得丑陋,可是却不敢重构,生怕一不小心被拉取祭天,然后来了个愣头青实习生正好参与这个模块迭代,一顿骚操作后这个模块炸了,那么面对屎山一样焦灼耦合的代码,面对产品汪随着手机壳颜色变化APP主题这种变态需求的时候,如何不在这坨屎山里修修补补,如何重构屎山,让你的代码成为金字塔一样的艺术品?老峰最近读了V...转载 2019-09-03 11:43:14 · 429 阅读 · 0 评论 -
为什么必须在主线程中操作UI
因为UIKit不是线程安全的。如果不在主线程中操作UI,可能会造成如下的情况:(1)两个线程同时设置同一个背景图片,那么很有可能因为当前图片被释放了两次而导致应用崩溃。(2)两个线程同时设置同一个UIView的背景颜色,那么很有可能渲染显示的是颜色A,而此时在UIView逻辑树上的背景颜色属性为B。(3)两个线程同时操作view的树形结构:在线程A中for循环遍历并操作当前View原创 2017-02-17 10:57:32 · 1666 阅读 · 0 评论 -
获取设备的伪UDID数值
UDID自iOS5.0及以后版本都被禁用了,所以现在用的可以说都是伪UDID值;而且使用值在每次调用时都会生成新值,这时候可以采用第一次生成值时保存到设备中,而不是保存到沙盒中(以避免应用被删除后,就没有这个值了);通常保存方法是使用keychain,或是系统级的剪切板 Pasteboard(避免添加keychain库的麻烦,可使用Pasteboard);代码示原创 2017-01-05 16:05:37 · 552 阅读 · 0 评论 -
写给 iOS 开发者看的 HTTPS 指南
https://autolayout.club/2016/12/22/写给-iOS-开发者看的-HTTPS-指南/HTTPS 基础定义HTTPS 看似跟 HTTP 一样,其实它只是看起来跟 HTTP 一样,实际上是一种新的网络架构。在当前情况下,HTTPS 的英文全称应该是 HTTP over TLS。HTTPS 请求 和 HTTP 请求的异同普通 HTTP 请求直接基转载 2017-01-04 17:55:35 · 451 阅读 · 0 评论 -
DynamicCocoa:滴滴 iOS 动态化方案的诞生与起航
DynamicCocoa:滴滴 iOS 动态化方案的诞生与起航http://mp.weixin.qq.com/s/qRW_akbU3TSd0SxpF3iQmQ转载 2017-01-04 16:21:17 · 1124 阅读 · 0 评论 -
XCode6新建项目中pch文件,及strings文件处理
使用XCode6.0及以上版本新建项目时,是没有pch文件,也没有strin原创 2014-11-06 14:59:06 · 1635 阅读 · 0 评论 -
编写高质量iOS与OS X代码的52个有效方法
http://www.jianshu.com/p/d440d06994ac一、熟悉Objective-C1、了解Objective-C语言的起源Objective-C为C语言添加了面向对象特性,是其超集。Objective-C使用动态绑定的消息结构,也就是说,在运行时才会检查对象类型。接收一条消息之后,究竟应执行何种代码,由运行环境而非编译器来决定。理解C语言的核心概念有助于写好Objectiv转载 2016-09-07 10:13:31 · 496 阅读 · 0 评论 -
静态库.a的制作,或framework的制作
framework和.a两种静态库的介绍及区别1、.a是一个纯二进制文件,.framework中除了有二进制文件之外还有资源文件。2、.a文件不能直接使用,至少要有.h文件配合,.framework文件可以直接使用。3、.a + .h + sourceFile = .framework。4、.a只是静态库。framework既可以是静态库也可以是动态库。例如系统的framework原创 2016-08-26 10:56:13 · 444 阅读 · 0 评论 -
处理器适配架构(x86_64、armv7、armv7s、arm64、i386)
模拟器32位(即Mac处理器的指令集):i386模拟器64位(即Mac处理器的指令集):x86_64真机32位(即ARM处理器的指令集):armv7、armv7s真机64位(即ARM处理器的指令集):arm64项目开发中,可能使用第三方提供的静态库.a文件,或framework文件,如果静态库提供方技术不成熟,使用的时候就会出现问题,例如:在真机上编译报错:No a原创 2016-08-25 11:31:14 · 15584 阅读 · 0 评论 -
类加载和实例化方法load/initialize
在Objective-C的类被加载,或初始化的时候,也可以收到方法回调,可以在适当的情况下做一些定制处理。+ (void)load;+ (void)initialize;如果有需要定制,我们可以在自定义的NSObject子类中给出这两个方法的实现,这样在类的加载和初始化过程中,自定义的方法可以得到调用。从如上声明上来看,也许这两个方法和其它的类方法相比没什么特别。但是原创 2016-08-02 23:29:31 · 617 阅读 · 0 评论 -
CADisplayLink 和 NSTimer 的差异
CADisplayLink 和 NSTimer 的差异。NSTimer 其实就是 CFRunLoopTimerRef。一个 NSTimer 注册到 RunLoop 后,RunLoop 会为其重复的时间点注册好事件。RunLoop为了节省资源,并不会在非常准确的时间点回调这个Timer。Timer 有个属性叫做 Tolerance (宽容度),标示了当时间点到后,容许有多少最原创 2017-02-17 11:12:07 · 598 阅读 · 0 评论 -
使用GCD进行倒计时操作
地址:https://github.com/potato512/SYCategory效果图:代码示例:// 倒计时+ (void)timerGCDWithTimeInterval:(NSTimeInterval)time maxTimerInterval:(NSInteger)maxTime afterTime:(NSTimeInterval)afterTime handle:(原创 2017-05-10 23:44:31 · 609 阅读 · 0 评论 -
国际化多语言
官网介绍NSLocalizedString 使用说明一、国际化多语言的介绍App 国际化多语言,就是在 App 里预定义了多种语言的Localizable.strings文件,根据设备的系统语言自动识别显示对应的语言,或者是在应用内设置不同的语言识别显示对应的语言。1、随系统语言国际化跟随系统语言进行改变。实现时,需要Kill掉App重新打开才会有效果。2、随应用内语言设置国际化应...原创 2019-06-23 20:49:53 · 1851 阅读 · 0 评论 -
图片加载优化
图片的显示分为三步:加载、解码、渲染。加载:CPU,未解码的压缩数据image解码:UIKit,赋值时imageView.image = image进行解码变成RGB颜色数据,CPU和内存负载瞬间增长,CPU处理(与图片宽高成正比)渲染:UIKitUIImage *image = [UIImage imageNamed:@“xxx”];1、加载时,消耗CPU,数量大时,造成卡顿2、通过...原创 2019-06-19 13:40:12 · 503 阅读 · 0 评论 -
自定义格式化字符串NSStringFromFormat(NSString *format, ...)
自定义类型NSLog格式的格式化字符串方法,如下所示:/// 格式字符串NSString *NSStringFromFormat(NSString *format, ...){ va_list list; va_start(list, format); NSString *string = [[NSString alloc] initWithFormat:format...原创 2019-03-12 11:44:57 · 1806 阅读 · 0 评论 -
clang命令编译OC成C++文件
效果图操作说明(终端命令操作)1、进入要编译文件所在目录2、编译命令:// 命令clang -x objective-c -rewrite-objc -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk 编...原创 2018-06-28 11:03:24 · 2236 阅读 · 0 评论 -
SYAlertView弹窗视图
SYAlertView自定义弹窗子视图UI根据UI设计需求,自定义各种样式的弹窗子视图:* 自定义UI及样式* 自定义显示动画* 编辑控件自适应键盘高度效果图代码示例1、导入头文件#import "SYAlertView.h"2、实例化SYAlertView *alertView = [[SYAlertView alloc] init];alertView.isAnimation = YES;3...原创 2018-06-08 17:26:55 · 340 阅读 · 0 评论 -
iOS开发常用Xcode插件工具
插件名称 插件URL 插件说明 Alcatraz插件管理工具 http://alcatraz.io 用于安装Xcode插件 格式规范VVDocumenter https://github.com/onevcat/VVDocumenter-Xcode 对齐常规代码XAlign http://github.so/XAlign/ 颜色显示ColorSens原创 2016-05-20 15:26:35 · 766 阅读 · 0 评论 -
iOS开发常用开源框架——网络&socket&webSocket
名称 URL 说明原创 2016-05-20 18:03:14 · 777 阅读 · 0 评论 -
我的链式编程
在编写代码时,通过点(.)调用的方式,将代码连接成一行,大大增加了代码的可读性,这就是链式编程。实现链式编程的关键就是声明一个block的属性,而这个block返回值必须还是一个对象(根据业务需求不同,可以返回的是这个对象实例本身,也可以是这个类的另一个实例,更可以是另一个类的实例对象)。而block中内部的逻辑就是项目的业务逻辑。 注意事项 1 不需要考虑调用顺序,只需要知道考虑结果原创 2017-07-04 12:22:23 · 381 阅读 · 0 评论 -
UIView的生命周期
任何对象的者有一个生命周期,即都存在一个实例化到销毁的过程。UIView对象也不例外,那么UIView从init/new开始后,直到dealloc结束的过程中都经历了哪些过程呢?首先自定义继承自UIView的对象LifeView#import @interface LifeView : UIView@end#import "LifeView.h"@interface L原创 2017-06-16 00:57:13 · 1249 阅读 · 0 评论 -
类别添加属性,即runtime运行时添加属性(动态属性)
在自定义扩展类时,可以通过运行时添加属性。关键点在于,首先必须导入运行时头文件,即“#import ”;其次,设置属性,即“objc_setAssociatedObject(self, &keyLineBottom, lineBottom, OBJC_ASSOCIATION_RETAIN);”;还有是获得设置的属性,如“UIImageView *lineBottom = objc_ge原创 2016-01-08 17:43:37 · 561 阅读 · 0 评论 -
类别中定义对象有效性判断(nil、Nil、null、length等)
首先区分下各种概念1、nil:指向oc中对象的空指针。如:NSString *string = nil;若obj为nil:[obj message]将返回NO,而不是NSException2、Nil:指向oc中类的空指针如:Class class = Nil;3、NULL:指向其他类型的空指针,如一个c类型的内存指针,是一个值,表示是基本数据类型为空。如:int原创 2016-07-08 10:49:04 · 1421 阅读 · 0 评论 -
iOS中UIView layer的对应关系
http://blog.csdn.net/iukey一、添加 Quartz Core 框架1、要使用 Quartz Core 框架,你需要将其添加到你的工程中 2、然后 #import 二、认识图层对 ps 有所了解的人都知道图层的概念,在这里也一样。在PS中一张图片至少得有一个图层,一个或多个图层的叠加构成了一张位图。我们这里一个或多个图层转载 2015-05-30 14:27:57 · 2992 阅读 · 0 评论 -
iOS layoutSubviews视图重绘总结
ios layout机制相关方法- (CGSize)sizeThatFits:(CGSize)size- (void)sizeToFit- (void)layoutSubviews- (void)layoutIfNeeded- (void)setNeedsLayout- (void)setNeedsDisplay- (void)drawRectlayoutS转载 2015-05-30 21:42:13 · 1669 阅读 · 0 评论 -
如何快速的查看一段代码的执行时间
如何快速的查看一段代码的执行时间。#define TimeBegin NSDate *startTime = [NSDate date]#define TimeEnd NSLog(@"Time: %f", -[startTime timeIntervalSinceNow])在想要查看执行时间的代码的地方进行这么处理:TimeBegin//do your wo原创 2015-05-10 22:16:17 · 1547 阅读 · 0 评论 -
Xcode 意外退出
打开Xcode就退出,提示“Xcode 意外退出”,一直都是这种情况,太郁闷了。想想,这是新安装的Xcode版本啊,不至于有问题吧?既不是测试版,也不是与系统存在冲突。最后突然想起会不会是因为装了第三方的Xcode插件呢?果断把插件文件夹“Plus-ins”删除,然后再运行Xcode,居然成功运行了。删除路径:用户名文件夹——>资源库文件夹——>Application Support——>原创 2015-03-17 10:30:01 · 1787 阅读 · 0 评论 -
iOS XCode快捷键使用
xcode快捷键使用是本文要介绍的内容,本文分为两部分有友们介绍,本节介绍xcode快捷键使用 (上),不多说,先来看内容。1、xcode相关:关于xcode 可设偏好设置 command+,清空缓存可设隐藏xcode command+h隐藏其它 command+option+h显示全部可设退出xcode command+q转载 2015-03-01 09:54:05 · 478 阅读 · 0 评论 -
iOS Xcode苹果专业开发工具
Xcode是一个强大的专业开发工具,可以简单快速、而且以您熟悉的方式执行绝大多数常见的软件开发任务。相对于创建单一类型的应用程序所需要的能力而言,Xcode要强大得多,它的设计目的是使您可以创建任何想像得到的软件产品类型,从Cocoa及Carbon应用程序,到内核扩展及Spotlight导入器等各种开发任务,Xcode都能完成。Xcode独具特色的用户界面可以帮助您以各种不同的方式来漫游工具中的代转载 2015-03-01 09:54:19 · 572 阅读 · 0 评论 -
iOS UI样式设计
转载 2015-02-28 11:40:11 · 636 阅读 · 0 评论 -
UI控件集合图
原创 2016-03-01 22:57:51 · 376 阅读 · 0 评论 -
如何制作自己的Pod库
GitHub新建自己的git repositoryNewRepository将项目clone到本地git clone git@github.com:ZHANGMRXIN/ZXCategory.gitCloneReposiorty初始化好项目,将Pod库文件建立好目录PodFileDirectory转载 2016-04-10 01:08:53 · 1449 阅读 · 0 评论 -
认识单例
+ (id)shareMessage{// if (!staticMessage)// {// @synchronized(self){// staticMessage = [[MarkMessage alloc] init];// assert(staticMessage);原创 2014-07-24 11:39:57 · 530 阅读 · 0 评论 -
原生二维码扫描与生成
Demo二维码的扫描、二维码的生成.h文件#import #import @interface SYBarcodeManager : NSObject#pragma mark - 扫描二维码/** * 扫描二维码 * * @param rect 扫描框frame属性 * @param view 扫描框父视图 * @param comple原创 2016-07-28 16:13:31 · 569 阅读 · 0 评论 -
APP应用程序的生命周期
APP应用程序之所以有生命周期,是因为手机端的资源总是有限的,如果开启了一个APP应用就一直占用着手机资源而不释放,这样就会造成手机资源的消耗殆尽,也因此会对设备的电池、流量、用户交互体验造成影响。所以通过APP应用程序的生命周期,首先是更好的控制APP应用程序,其次是更好的控制及使用手机资源、用户交互体验。APP应用程序状态(1)Not running:未运行,即程序没启动(2)In原创 2016-07-05 17:58:14 · 1065 阅读 · 0 评论 -
delegate的使用
delegate 代理是一种设计模式,即一个对象不能完成的事情,委托另一个对象帮其完成。比如说:A 要订购 电影票,但是 A 自己没办法去订购,于是 A 委托 B 帮其订购电影票,则 B 成为 A 的代理(也称为 A 的委托),同时帮 A 完成订购电影票的事情。具体实现方法:1、定义协议1-1、协议名称1-2、必须实现的代理方法1-3、非必须实现的代理方法如:...原创 2016-07-02 22:54:08 · 869 阅读 · 0 评论 -
在线工具收集
在线工具名称 在线工具URL 在线工具说明 在线工具kjson http://www.kjson.com JSON、XML、html、转换、加密等 在线工具benson http://www.bejson.com JSON、编码加密、API接口、网络、前端、平台工具等 在线工具ATOOL http://www.atool.org APP设计工具 h原创 2016-05-20 14:52:22 · 432 阅读 · 0 评论 -
开发中头文件的引用、集合等对象的简写实现说明
一、尽量少引入其他头文件除非有必要,否则不要引入头文件。一般来说,应在某个类的头文件中使用 向前声明(@class MEPerson;)来提及别的类,并在实现文件中引入那些类的头文件。这样做可以尽量降低类之间的耦合(couping);有时无法使用 向前声明(@class MEPerson;),比如要声明某个类遵循意向协议。 这种情况下,尽量把 “该类遵循某协议” 的这条声明 移至 “分类C原创 2016-05-20 15:04:49 · 1032 阅读 · 0 评论 -
如何避免图像解压缩的时间开销
这是一篇译文,(原文"Avoiding Image Decompression Sickness"在此),原文是我看过的非常不错的一篇关于iOS图片显示的一些文章,解决了我的一些疑惑和问题,因此翻译过来分享,为保证一定的通顺性其中一部分内容与原文有些许出入,但我尽量保证了意思的一致性,欢迎指正批评,横线之间为译文,略挫,见谅:当开始iCatalog.framework的工作时,我发现使转载 2015-02-12 09:44:28 · 602 阅读 · 0 评论 -
从零开始创建iOS远程推送证书
第一步登录Apple Developer后台,左侧选择AppIDs,开始新建AppID.点击右上方的➕号图标新建AppID第二步在App ID Description栏输入自己的对该ID的描述信息.相当于取个名字而已.App ID Prefix选择你开发者账号对应的TeamID选项值.App ID Suffix可以是明确指定的AppID值也可以是通配符的值,一般转载 2016-04-10 00:07:26 · 564 阅读 · 0 评论