- 博客(146)
- 资源 (7)
- 收藏
- 关注
原创 理解Objective-C中的对象
OC是C语言的超集,在其之上提供了面向对象的能力。可我们面向的对象在OC中到底是个什么东西,或者说它在内存中如何表现呢?今天我们一起来说道说道。对象的理解首先来解决对象是什么的问题。先上结论:对象是类的具体体现;底层以C语言的结构体做为支撑;对象所占用的内存存储了结构体中的成员。对象是类的具体体现在面向对象中,我们使用类来描述具有特定属性和行为的一类事物,它是一份蓝图;而对象是蓝图的具体体...
2020-05-03 13:59:22
812
原创 去除performSelector的leak警告
#pragma clang diagnostic push #pragma clang diagnostic ignored “-Warc-performSelector-leaks” 含有警告的代码 #pragma clang diagnostic pop
2016-10-03 15:22:08
526
原创 CocoaPods安装过程的注意事项
写在前面关于CocoaPods的安装和基本使用,已有大神总结的很好了,这里只是以安装步骤为主线,写出修改后的命令(之前的命令现在许多更新,自己失败了多次),建议先阅读下面推荐的第一篇博客了解大体思路之后再返回阅读本篇。 推荐几篇博客,方便大家学习: CocoaPods详解之—-使用篇 CocoaPods详解之—-进阶篇 CocoaPods详解之—-制作篇详细内容 说明:1.这里的Ma
2016-09-11 15:18:09
385
原创 单例设计模式
写在前面设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。当然设计模式和语言没有关系,它是一种编程思想。本篇将介绍单例设计模式的实现,以OC语言为例详细内容对单例设计模式的理解 单例设计模式,保证了一个类的对象只有一个实例。这就是它的核心思想。在iOS中,NSFileManager、NSNotifi
2016-09-05 17:23:33
335
原创 FMDB的基本使用
写在前面在编程的世界里,总少不了和数据库打交道,毕竟这大千世界的数据太多,总有一个好的方法去管理,数据库技术就诞生了。这里主要介绍iOS中FMDB第三方库如何操作数据库的。FMDB github链接。详细内容对于FMDB需要了解的东西 支持CocoaPods管理支持ARC和非ARC环境,FMDB会根据环境自动适应支持文件全路径、@”“、NULL创建数据库代码示例开始之前,你要导入FMDB
2016-09-02 12:59:59
567
原创 观察者设计模式
写在前面设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。当然设计模式和语言没有关系,它是一种编程思想。本篇将介绍观察者计模式(又称发布-订阅模式)的实现,以OC语言为例详细内容对观察者模式的理解 上面已经提到观察者模式又叫发布-订阅模式,就像杂志的订阅一样,当你订阅一本杂志时,杂志社 会记录你–订
2016-09-01 21:29:29
310
原创 键值编程之KVC
写在前面Objective-C键值编程特性统称为键值编码(Key-Value Coding,KVC)和键值观察(Key-Value Observing,KVO)。本篇主要记录KVC的相关知识。键值编码是一种访问对象属性的机制。可以通过键值编码KVC通过名称(键)访问和操作对象的属性,而无需使用访问方法或支持实例变量。其中键就是属性名称,而值就是属性的值。详细内容下面是一个使用KVC的小例子[ob
2016-08-31 10:55:00
398
原创 代理设计模式
写在前面设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。当然设计模式和语言没有关系,它是一种编程思想。本篇将介绍代理设计模式的实现,以OC语言为例。详细内容对代理设计模式的理解在OC中,代理也称为委托。意思是自己不能完成或不愿意完成的事情,让别人去做。比如,你需要去买一设计模式的书,但是自己方便,这是
2016-08-30 21:14:03
325
原创 UML (Unified Modeling Language)的几种关系
写在前面 本篇主要记录UML中比较重要的几种概念,并不对UML做详细介绍。其中多表现为OC中的内容。详细内容关联、A类的实例方法的形参是B类的对象,A类和B类的关系是关联关系。使用实心线加箭头表示,箭头指向形参类(B类)。 依赖、A类的类方法的形参是B类的对象,A类和B类的关系是依赖关系。使用虚线加箭头表示,指向形参类(B类)。 聚合、A类的实例变量是B类的对象,A类
2016-08-30 20:26:57
464
原创 枚举的使用
C语言的枚举typedef enum ENUM_NAME{ ENUM_VAR1, // 默认是int类型,从0开始 ENUM_VAR2}ENUM_NAME;其他的写法就不列举了。Objective-C的枚举在oc中使用枚举可以用NS_ENUM和NS_OPTIONS关键字(确切的讲是对enum的重命名)来定义枚举类型。下面来看看如何使用:typedef NS_ENUM(NS_OPT
2016-08-10 11:10:51
441
原创 常用类-NSMutableDictionary
NSMutableDictionary是NSDictionary的子类,在 常用类-NSDictionary 一篇中的API都适用于NSMutableDictionary,下面看下其独有的API。常用API预览 -initWithCapacity: 初始化字典空间 -setObject:forKey: 添加key-value - removeObjectForKey: 移除
2016-08-05 16:41:51
295
原创 常用类-NSDictionary
概述NSDictionary是关键字及其定义的集合。也被称为散列表或关联数组,它使用的是键查询的优化存储方式。它可以立即找出要查询的数据,而不需要遍历整个数组进行查找。在快速查找方面有很大优势。对于NSDictionary对象,一经创建就无法进行修改;若想进行修改,可以通过创建其子类NSMutableDictionary的对象。该篇主要讲述NSDictionary的使用。常用API预览 +
2016-08-04 20:30:27
318
原创 常用类-NSMutableArray
NSMutalbeArray类对象是可变的,它是NSArray类的子类,在 上篇 介绍有关NSArray类的API这里都是可以使用的。下面介绍下NSMutableArray特有的API。
2016-08-04 17:13:57
265
原创 NSString的内存问题
先看看我们遇到的问题 从上面运行代码所占用内存来看,并不像我们想的那样内存飚升。这是为什么?看看下面的分析:内存地址的比较测试用例 NSString *str1 = @"123456"; NSString *str2 = @"123456"; NSString *str3 = [NSString stringWithFormat: @"123456"]; NSSt
2016-08-04 09:20:57
572
原创 运行时初探
运行时消息传递消息传递消息传递是指一种在对象之间发送和接收消息的通信模式。在Objective-C中使用消息传递来调用类和类实例的方法。一个发送消息的例子:[receiver messageWithParam: param1 andParam: param2];以上示例由接收器(消息的目的地:类或类实例)和消息(由选择器和参数)组成。消息传递过程消息传递的关键元素- 消息:向类或类实例发送的名
2016-08-03 21:39:42
233
原创 OC的消息转发
什么是转发机制当对象接收到与其方法不匹配的消息时,通过消息转发机制可以使对象执行用户预定义的处理过程。消息转发小例子先看下转发图解一步步构建建立DoMyWork类 DoMyWork.h #import <Foundation/Foundation.h> @interface DoMyWork : NSObject @property (nonatomi
2016-08-03 17:11:35
331
原创 常用类-NSArray
注:NSArray一经创建就不可以更改,只能存储NSObject类子类的对象,不能直接存储C语言基本数据类型,也不能直接存储nil空类型的对象。(直接存储是指,不经过处理的存储) 创建数组@[@”“, @”“]; // 直接写出数组中的对象 NSArray *boxes = @[ @"12", @"34", @"56" ];+arrayWithObjects // 列出
2016-08-03 15:17:15
252
原创 常用类-NSMutableString
NSMutableString是NSString的子类,所以 上篇 介绍的NSString所有方法对于NSMutableString来说,都可以使用。因为NSMutableString的对象是可变的字符串。下面来说下其特有的方法。 字符串创建+stringWithCapacity: // 参照给定大小创建字符串 NSMutableString * mStr = [NSMutabl
2016-08-03 10:47:33
299
原创 常用类-NSString
NSString注:NSString类的对象是不可变的,就是说,一个字符串一旦被创建,就不可再次改变它的内容。默认使用UTF-16编码。 字符串的创建@”“// 最简单的就是这个啦。NSString *str = @"This is a string."stringWithFormat:// 根据后面的格式化串进行初始化。格式化串和NSLog方法的参数一样。NSString *str
2016-08-02 21:52:48
277
原创 category的应用
创建对私有方法的向前引用。一般情况下,没有在.h接口文件中声明,只有在.m文件中出现的方法,外界是不能调用的。 但是通过定义类别后,把这个.m文件中的方法在类别的.h文件中声明出来,外界就可以调用了。 这种方式就是对私有对象的向前引用。向对象添加非正式协议。正式协议是通过@protocol关键字声明的一系列方法,然后由准守协议的类去实现这些方法。非正式协议是通过分类,将正式协议里声明的方法声
2016-08-01 17:51:28
285
原创 继承
语法@interface ClassName : NSObject @end 继承用 : 表示。子类可以从父类得到什么接口中声明的实例变量。接口中声明的方法。父类遵守的协议,子类也会默认遵守。注意事项Objective-C是单继承的。谁的实例变量由谁进行维护。要使用方法访问父类的实例变量。子类的对象中有一个isa指针,指向的是它所属的类。每
2016-08-01 17:44:48
266
原创 块-block(语法部分)
什么是block块,也称为闭包。 简单的说,块提供了一种方式可以创建一组语句(即代码块)并将这些语句赋值给一个变量,随后就可以调用这个变量。它可以访问和它在同一个作用域内的变量。如何声明一个bloc通过支持块的语法功能可以声明块类型的变量和常亮。 声明一个块可以使用下面的语法: 返回值类型 (^块的名称) 参数类型 return type (^blockName) (parameterType,
2016-08-01 16:56:37
807
原创 关于内存管理的一些小问题
????????????????????????retainCount????????????0.@autoreleasepool { NSObject *obj = [[NSObject alloc] init]; [obj release]; NSLog(@"retainCount is %lu", obj.retainCount); } ????????
2016-08-01 16:53:03
369
原创 内存管理机制MRR/MRC和ARC
内存管理规则当你使用new、alloc、copy方法创建一个对象时,该对象的引用计数器值为1.当不再使用该对象时,你要负责向该对象发送release或者autorelease消息。使用其他方法获取对象,则假设该对象的引用计数器为1,切已经设置了自动释放,你不必对其进行管理;当你拥有该对象,则需要保留(retain),在操作完成后还需要释放这个对象。如果你保留了某个对象,你需要释放或自动释放该对
2016-08-01 16:52:08
1448
4
原创 内存管理
管理的是哪部分内存继承NSObject的类 的对象所占用的内存需要进行管理。C语言的数据类型不需要进行管理。OC对象使用的内存在堆上,需要管理,而C语言的数据存在在栈中,计算机自动管理。不进行内存管理或进行了错误的内存管理将导致的结果内存泄漏:程序没有释放不再使用的对象,就会出现该问题。若程序一直申请内存,却不进行释放,那么内存资源终将耗尽。悬挂指针:程序释放了任然在使用的内存,会导致该
2016-08-01 16:47:04
250
原创 protocol
与非正式协议相比,正式协议也是一系列方法的声明。但是,正式协议需要显示的准守。正式协议一般独立成为一个文件。一个类若准守了协议,它必须实现协议的必须方法。如何声明协议使用@protocol // method list@end来声明一个协议。如何遵守协议在声明类的时候,使用@interface ClassName:父类<协议>@end采用了协议之后,类必须实现协议中要求必须实现的方法,对于协
2016-08-01 16:43:58
414
原创 selector
什么是选择器选择器是一个方法名称,但它以Objective-C运行时使用特殊方式编码,以快速进行查询。 @selector(方法名)给一个方法进行编码,生成选择器。NSObject类提供了一个方法: - (BOOL)respondsToSelector:(SEL)aSelector; 用于检查一个对象是否能响应一个特定消息。选择器可以当做参数进行传递。
2016-08-01 16:42:53
206
原创 category
什么是category类别一种为现有类添加新方法的方式。它利用OC动态运行时分配机制。它允许你给任何类添加新的方法。实现语法@interface 已有类名 (类别名称) // add your methods @end小例子.h文件,文件名为NSString+NumberConvenience@interface NSString (NumberConvenience) - (NSNu
2016-08-01 16:42:03
275
原创 方法
声明格式+/- (返回值) methodName:(参数类型)参数名称 andSome:(参数类型)参数名称… 如:+ (id) initWith:(NSString*) name andHeight:(double) height; 注:没有形参的方法比较简单,- (void)print;: 称为中缀符,是方法名的一部分。一个中缀符匹配一个形参。类方法/静态方法以 + 开头的方法称为类方
2016-08-01 16:39:51
226
原创 @property
@property做了什么@property : 在类的接口中、分类接口、协议中声明属性。格式:@property (特性) 属性类型 属性名称。 它会设置与属性关联的setter/getter方法,但是无法完成真正的方法定义。 @synthesize: 在实现文件中完成属性setter/getter方法的定义、实例变量的定义,并在setter/getter方
2016-08-01 16:37:18
300
原创 BOOL
BOOL的实际类型typedef signed char BOOL 注:这意味着BOOL是一个用8bit存储的类型,若将一个多于8bit的类型赋值给BOOL类型,将取最后面的8bit作为它的值。BOOL的取值YES 1;NO 0 注:BOOL isTrue;默认为 0
2016-08-01 16:33:02
1902
原创 内存的划分
内存的划分栈-stack栈中的内存由编译器自动管理。 函数的形参、普通局部变量都存储在栈中。堆-heapC语言中使用malloc函数、OC中使用alloc函数申请的都是堆中的内存。需要程序员手动动态的 申请和释放。若程序员申请过后,没有释放,若程序正常结束,OS会回收这部分内存;也有可能导致程序无法正常结束。静态存储区全局变量、静态变量都存储在静态区。内存分配发生在编译阶段。系统管理。常量区con
2016-08-01 16:29:51
301
原创 团队开发管理-项目沟通管理
何为沟通沟通模型沟通方式口头沟通:谈话、讨论、演讲、汇报、会议。。。 *可以直观的传递理解彼此。 *时间地点要求较高。书面沟通:合同、报告、会议纪要、报表备忘录。。。 *具有严谨性、规范性、权威性,适合存档。 *书写要求高,要求提前准备。电子沟通(电话,网络):电话、Email、BBS、Blog、即时通讯。。。 *突破空间距离限制。 *无法准确得知相互的肢体语言。不同层面的沟通*
2016-06-01 10:25:14
389
原创 团队开发管理-团队组织与管理
团队管理的四个方面 成员分工 人员选择参考标准团队的组件模式团队:由若干人组成的群体,他们具有互补技能,对一个共同的目的、绩效目标及方法做出承诺并彼此负责。 绩效评估**通过对团队成员工作绩效的考察与评价,反应团队成员的实际能力和业绩以及某种工作职位的适应度。 **绩效评估要从多维度进行考察。 参考考核表:
2016-05-30 15:26:03
531
原创 单元测试-白盒测试方法
白盒测试概念白盒测试是将测试对象看做一个透明的盒子,运行测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序的所有逻辑路径进行测试。 *一个全面的测试是需要结合使用的。控制流图
2016-05-27 20:33:28
643
原创 单元测试-黑盒测试方法
测试用例的理解 设计测试用例注意事项: 黑盒测试概念理解: 可以理解为测试功能是否完备。 **等价类划分: 例子: 复合数据类型的等价类划分: **边界值分析
2016-05-24 16:11:39
2560
原创 单元测试-单元测试概述
总体测试的缺点总体测试就是在代码编写完成之后,对系统进行的统一测试。 这样会造成项目后10%的工资占用了项目90%的时间,同样也会造成 故障难以定位,而且飘忽不定,开发和测试困难增大。单元测试*单元测试是对软件中的最小可测试单元进行检查和验证。 *在现实中,代码质量最好,开发速度最快的程序员是单元测试做的最好的。 *可以分为静态测试和动态测试: 测试的方面: 测试原则: 测
2016-05-22 17:13:21
334
原创 软件开发过程-结对编程实践
结对编程结对编程是有两名程序员在一台电脑上结对编写解决同一问题。 **注意的事项: *驾驶员是动手写程序的人 * 领航员是一旁提醒的人 **并不是所有项目都适合结对编程
2016-05-19 16:37:17
338
算法设计与分析
2014-12-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人