Hello, World!

Hello, World!

KVO、KVC
KVOKVO的使用KVO(Key Value Observing),键值监听,用于监听对象的属性值的改变。使用方式如下: 12345678910// 被监听对象@interface Animal : NSObject@property(nonatomic, copy) NSString *name;@end@implementation Animal@end 123456789101112131415161718- (void)viewDidLoad { [super viewDidLoad]; Animal *animal = [[Animal allo...
load、initialize
load基本使用load方法是runtime在加载类和分类的时候会调用,是在程序入口函数main之前调用,而且只会调用一次。 通过代码验证一下本类的load方法调用。 我们添加Panda继承Animal类,并添加Panda+One分类,分别重写+load方法。 123Animal: loadPanda: loadPanda (One): load 通过验证我们发现不仅调用了分类的load方法,而且调用了原类的load方法,这和上面我们验证的优先调用分类的方法的逻辑相冲突,到底为什么会调用原类的方法,我们通过底层的源码一探究竟。 调用原理同样的我们从runtime的入口_objc_ini...
Category
Category的使用Category是Objective-C语言中提供的一种灵活的类扩展机制。 使用方式如下: 12345678910111213141516// 原封装@interface Animal : NSObject { int _name;}- (void)cry;@end@implementation Animal- (void)cry { NSLog(@"Animal: cry");}@end 1234567891011121314151617181920212223242526272829303...
App的不同状态
对于iOS App来说,知道当前的状态是至关重要的,因为iOS对系统资源有着相当严格的限制,app在不同的状态下可执行的操作也是不同的。在当程序处于后台时,系统对app所能执行的操作做了严格的限制,以提高电池的使用时间和正在运行程序的用户体验。当在前后台切换app时,系统会发出相应的通知,在这些通知中可以改变app的操作。 当你实现程序代码时,应该遵循下面这些建议: 1.(必须)当发生状态转换时进行恰当的响应处理,如果不进行处理操作可能会导致数据的丢失和不好的用户体验。 2.(必须)当app转入后台时,确保app所执行的操作是正确地被循序的操作(后台允许5中操作,详细见下面) 3.(建议...
算法基础
算法三原则1,有穷性。 能在有限的步奏,有限的时间内完成。2,确定性。 对相同的输入,产生唯一的输出,没有歧义。3,可行性。 算法是可行的,在当前设备,经济水平等条件下是可用的。 算法分析1,时间复杂度。 * 大O:最坏情况下的时间复杂度。(如快速排序:O(n^2),期望nlogn) * 忽略常数,用来描述随着问题规模的增长,所需时间增长的速率/数量级。 如:1-k -> O(1),k是一个常数。 2,空间复杂度。 * 同时间复杂度。 算法极限对于摸一个问题,算法能做到的也是有极限的,例如:通常基于遍历的算法,复杂度必定大于等于O(n)。 不需...
基于UIWebView的混合编程
基于UIWebView的混合编程是指同时使用原生的控件和UIWebView来展现应用界面。合理地使用该方案可以保证应用既有原生界面的流畅交互效果,又有Web界面的良好的动态修改和多平台复用的优势。 混合编程简介基于UIWebView的混合编程本来是一个挺普通和常见的技术框架,但是自从国外开始用Hybird来称呼它时,这个技术突然间就变得“高大上”起来。国内的许多应用都采用了基于UIWebView的混合编程技术,这些页面都具有以下共同的特点: 1.排版复杂。通常包括图片和文字的混排,还有可能有链接需要支持点击。如果不用 UIWebView,自己用原生控件通过拼装来实现,由于界面元素太多,做...
对象拷贝
NSObject类提供了两个用于拷贝的方法:- (id)copy 和- (id)mutableCopy,这两个方法都可以复制已有对象生成副本。 由于Objective-C中几乎所有的类都继承自NSObject,所以类中都有copy和mutableCopy两个方法,那么是否就意味着对象可以直接调用这两个方法进行拷贝了呢? 定义一个AMPerson类继承自NSObject 进行测试,代码如下: 12AMPerson *p1 = [[AMPerson alloc] init];AMPerson *p2 = [p1 copy]; 运行程序,发生崩溃,并输出以下错误信息:-[AMPerson ...
iOS并发编程进阶
NSThread需求一:用NSThread实现三个线程任务A、B、C,它们结束之后,再执行D、E任务。思路:用KVO监听NSThread实例的isFinished属性。 1demo 需求二:把有三个参数的函数放在子线程执行。 1NSThread暂时实现不了。 NSOperation需求一:用NSOperation实现三个线程任务A、B、C,它们结束之后,再执行D、E任务。 方式一:先执行封装了A + B + C操作的NSBlockOperation,KVO监听属性finished=YES时,再执行封装了D + E操作的NSBlockOperation对象。 123456789101...
使用CocoaPods做依赖管理
每种语言发展到一定阶段,都会出现相应的依赖管理工具,例如Java语言的Maven、Node.js的npm等。本篇介绍iOS项目的依赖管理工具CocoaPods。 CocoaPods简介随着iOS开发者的增多,业界也出现了为iOS程序提供依赖管理的工具,它的名字叫作CocoaPods。CocoaPods 项目的源码在 Github 上管理。该项目开始于2011年8月,经过多年发展,现在已经成为iOS开发事实上的依赖管理标准工具。 开发iOS项目不可避免地要使用第三方开源库,CocoaPods的出现使得我们可以节省设置和 更新第三方开源库的时间。 在使用CocoaPods以前,我需要:1.把...
Block基础
什么是blockblock就是一个里面存储了指向函数体中包含定义block时的代码块的函数指针,以及block外部上下文变量等信息的结构体。 block内存分布三种类型block在Objective-C语言中,有三种类型的block。1,__NSGlobalBlock__ 保存在全局区,不会访问任何外部变量。2,__NSStackBlock__ 保存在栈中,当函数返回时会被销毁。3,__NSMallocBlock__ 保存在堆中,当引用计数为0时会被销毁。 在MRC模式下,运行如下代码,从log中可以证明存在三种类型的block。 123456789101112131415161...
avatar
朱献国
努力学习👍努力工作
FRIENDS
friendA friendB