Objective-C编程
文章平均质量分 70
richard_飞飞
天空中没有翅膀的痕迹,但我已经飞过
展开
-
IOS开发中单例模式使用详解
第一、基本概念单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问。第二、在IOS中使用单例模式的情况1.如果说创建一个对象会耗费很多系统资源,那么此时采用单例模式,因为只需要一个实例,会节省alloc的时间2.在IOS开发中,如果很多模块都要使用同一个变量,此时如果把该变量放入单例类,原创 2013-09-30 16:24:48 · 4047 阅读 · 1 评论 -
objective C 内存管理及属性方法详解
oc为每个对象提供一个内部计数器,这个计数器跟踪对象的引用计数,当对象被创建或拷贝时,引用计数为1,每次保持对象时,调用retain接口,引用计数加1,如果不需要这个对象时调用release,引用计数减1,当对像的引用计数为0时,系统就会释放掉这块内存,释放对象调用dealloc当对象包含其他对象时,就得在dealloc中自己释放他们NSObject是IOS所有类的基类有两个基本函数,原创 2014-05-19 11:34:15 · 1045 阅读 · 0 评论 -
IOS 中NSTimer使用注意事项
1、初始化+ (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)yesOrNo;+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTim原创 2014-05-16 11:22:17 · 1838 阅读 · 0 评论 -
IOS中复制对象的用法及深拷贝和浅拷贝详解
第一、复制对象的基本概念复制一个对象为副本,开辟一块新的内存来存储副本对象。第二、如果一个对象想具备复制的功能,必须实现协议和协议NSObject自带的常用的对象有:NSNumber、NSString、NSArray、NSDictionary、NSMutableArray、NSMutableDictionay、NSMutableString,copy产生的对象时不可变的,mutable原创 2014-05-19 11:12:18 · 2857 阅读 · 0 评论 -
IOS的归档
归档也叫序列化,是将文件存在硬盘,解档是从硬盘还原5种方式:第一种、使用属性列表进行归档如果对象是NSString,NSDictionary,NSArray,NSData或者NSNumber,可以使用writeToFile:atomically方法将数据写到文件,注意这种方式是明文sample: NSArray *array = @[@"abc",@"123",@23原创 2013-12-28 23:29:13 · 2158 阅读 · 0 评论 -
NSPredicate类在OC中用法
基本概念:cocoa中提供了NSPredicate类,指定过滤器的条件,将符合的对象保留下来创建谓词:原创 2013-11-14 11:53:39 · 1920 阅读 · 0 评论 -
IOS基础架构
iPhoneOS(现在叫iOS)是iPhone, iPod touch 和 iPad 设备的操作系统. OS(iOS)架构" title="浅谈iPhone OS(iOS)架构" height="153" width="260" style="margin-top:0px; margin-right:0px; margin-bottom:0px; margin-left:0px; p转载 2013-08-28 17:43:23 · 1497 阅读 · 0 评论 -
大牛的XCODE调试技巧
有这样一种情形:当我们正在快乐的致力于我们的app时,并且什么看都是无比顺利,但是突然,坑爹啊,它崩溃了。(悲伤地音乐响起)我们需要做的第一件事就是:不要惊慌。修复崩溃不是很困难的。假如你崩溃了,并且胡乱的改些东西,而且还在不停的念着咒语希望bug神奇的自动消失,你大多数情况下都会使情况更麻烦。相反的,你需要知道一些系统的方法,并且学习怎么找到崩溃和他的原因。转载 2013-08-22 11:26:01 · 3018 阅读 · 0 评论 -
UIApplicationsharedApplication的常用使用方法
下面是这个类的一些功能:1.设置icon上的数字图标 //设置主界面icon上的数字图标,在2.0中引进, 缺省为0 [UIApplicationsharedApplication].applicationIconBadgeNumber = 4;2.设置摇动手势的时候,是否支持redo,undo操作 //摇动手势,是否支持redo undo操作。原创 2013-08-29 17:38:50 · 1777 阅读 · 0 评论 -
OC分类、类方法、实例方法、OC 基础知识及常用的for/in方法
类方法前面有+,实例方法前面有-类方法和实例方法的区别在于,类方法不能使用实例变量。使用类方法主要原因有:1.类方法的使用不依赖于实例化一个对象,也就是说如果一个功能的实现不需要实例化对象,就可以用类方法来实现。2.类方法可以隐藏单例,将类方法和单例结合,可以在应用程序的任何地方访问静态实例,而无需使用指向对象的指针或保存他的实例变量。3.类方法和内存管理相关,分配一个NSAr原创 2013-08-22 04:03:24 · 4559 阅读 · 0 评论 -
动态绑定
动态绑定:传统的函数一般在编译时就已经把参数信息和函数实现打包到编译后的源码中了,而在OC中最常使用的是消息机制。调用一个实例的方法,所做的是向该实例的指针发送消息,实例在收到消息后,从自身的实现中寻找响应这条消息的方法。动态绑定所做的,即是在实例所属类确定后,将某些属性和相应的方法绑定到实例上。这里所指的属性和方法当然包括了原来没有在类中实现的,而是在运行时才需要的新加入的实原创 2014-05-21 20:51:58 · 939 阅读 · 0 评论 -
objective C中继承、协议、分类和多态的实现
第一、objective C中继承的实现在oc中只有实例变量会有权限控制,实例方法和类方法是没有权限控制的,这点与c++不同,OC默认的是protected,并且在声明权限控制时,没有分号在OC中可以像C++一样用指针运算法来访问实例变量Rectangle.h 文件代码:#import @interface Rectangle : NSObject{ in原创 2014-12-23 15:36:22 · 2016 阅读 · 0 评论 -
KVC方法详解与实现原理
KVC提供了一种在运行时而非编译时动态访问对象属性与成员变量的方式,该方法不需要调用get和set方法和变量实例就可以访问对象,KVC默认的实现方法有NSOject提供,这种方法及支持对象也支持简单数据类型。第一、在OC中访问变量的几种方式:1、设置为public型,通过->直接访问:代码为:@interface Book : NSObject{ @public原创 2014-12-23 17:54:07 · 2729 阅读 · 0 评论 -
Foundation框架常用数据类型和NSAutoreleasePool自动释放池解析
第一、NSAutoreleasePool自动释放池解析1、自动释放池的物理实现自动释放池用栈来实现,当你创建一个新的自动释放池是,会压栈到栈顶,接受autorelease消息的对象也会被压入到栈顶NSAutoreleasePool实现延时释放,内部包含一个数组(NSMutableArray),用来保存声名为autorelease的所有对象。如果一个对象声明为autore原创 2014-12-23 12:03:35 · 1178 阅读 · 0 评论 -
ARC使用规则
第一、不能使用retain/release/retainCount/autorelease使用ARC,内存管理由编译器来负责,无需写上面关键词第二、在ARC环境下,使用alloc/new/copy/mutableCopy来生成/持有对象copy/mutableCopy的使用需要copyWithZone的支持,如果没有,则不支持copy/mutableCopy第三、不能显示调用[su原创 2014-12-04 16:18:07 · 1225 阅读 · 0 评论 -
__weak修饰符详解
第一、weak弱引用不能持有对象实例。在持有某对象的弱引用时,若该对象被废弃,则此弱引用自动失效并处于nil被赋值的状态。第二、实例 id __weak obj1=nil; { /* * 生成并持有对象A */ id __strong obj0=[[Test alloc] ini原创 2014-12-04 15:01:11 · 3690 阅读 · 0 评论 -
__bridge_retained/__bridge_transfer/__bridge使用详解
第一、__bridge_retained的使用__bridge_retained转换可使要转换的变量也持有所赋值的对象 void *p=0; { id obj=[[NSObject alloc] init]; p=(__bridge_retained void*)obj; } NSLog(@"clas原创 2014-12-04 20:06:41 · 2124 阅读 · 0 评论 -
__strong 修饰符内存分析及循环引用带来的内存泄露
__strong 修饰符__strong 是id类型和所有对象类型默认的所有权修饰符__strong 表示对对象的强引用,在ARC中持有强引用变量在超出其作用域或强引用失效(如被置为nil),则引用对象被自动释放原创 2014-11-29 15:04:43 · 1257 阅读 · 0 评论 -
ARC中strong、weak、unsafe_unretained的区别
第一、strong关键字与retain关似,用了它,引用计数自动+1如果person定义如下:@interface Person : NSObject@property(nonatomic,strong)Book *book1;@end @autoreleasepool { p1=[[Person alloc] init]; Book *book原创 2014-10-14 17:26:55 · 2390 阅读 · 0 评论 -
enumerateObjectsUsingBlock、enumerateObjectsWithOptions、enumerateObjectsAtIndexes、makeObjectsPerfor使用
OC为 NSArray提供了方便的遍历block,下面进行详细的说明第一、enumerateObjectsUsingBlockNSArray *array=@[@"aa",@"bb",@"cc",@"dd",@"ee",@"ff",@"gg"]; [arrayenumerateObjectsUsingBlock:^(id obj,NSUInteger idx, B原创 2014-10-13 11:56:32 · 4094 阅读 · 0 评论 -
Block使用方法及内存管理详解
第一、综述block是OC中另外一种对象和对象的通信方式,是一对一的关系,类似于delegate,而通知时一对多的关系第二、定义block类型int (^myBlock)(int)第三、block的声明mylock=^(int a){ int result =a*a;return result;}第四、block的调用block(20);code原创 2013-10-28 17:04:10 · 2300 阅读 · 0 评论 -
Objective-C 布尔类型 和 class、SEL类型
发现很多初学者无法区分bool和BOOL及class类型,今天闲来无事,写个博文做个区分1. bool是C语言的布尔类型,有true和false,BOOL是Objective C 语言的布尔类型,有YES和NO,因为OC可以跟C混编,所以bool和BOOL可以同时出现在代码中2. BOOL深入解析:BOOL实际上是带符号的字符类型,存储空间为8位,所以如果把一个32位的整数赋给BOOL原创 2014-07-15 14:46:17 · 1369 阅读 · 0 评论 -
UIResponder常用方法
UIResponder类是UIApplication、UIView、UIViewController的超类。其实例方法包括:第一、(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event :当一个触摸事件结束时发出的UITouch实例对象- (void)touchesEnded:(NSSet *)tou原创 2013-12-23 15:19:59 · 1557 阅读 · 0 评论 -
NSUserDefaults的使用
NSUserDefaults 序列号方法类似于NSArray,常用与存储小规模数据,存在沙盒里,是plist文件第一、保存数据代码:NSUserDefaults *userDefault=[NSUserDefaults standardUserDefaults]; NSArray *array=[NSArray arrayWithObjects:@"one",@"two",@"原创 2013-10-09 14:03:44 · 1360 阅读 · 0 评论 -
enum和enum typedef 在IOS中的使用
第一、typedef的使用C语言里typedef的解释是用来声明新的类型名来代替已有的类型名,typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)如:typedef char gender;gender a;与char a;语句相同。第二 、enum的使用enum是原创 2013-09-23 15:44:47 · 5800 阅读 · 0 评论 -
IOS读取文件类和常用方法
第一、NSFileHandleNSFileManager类主要对文件的操作(删除、修改、移动、复制等)NSFileHandle类主要对文件的内容进行读取和写入第二、NSFileHandle类处理文件的步骤创建一个NSFileHandle对象对打开的文件进行I/0操作关闭文件可以使用NSFileHandle进行断点续传第三、实现查找功能的代码:NSString *原创 2013-10-08 11:41:20 · 1951 阅读 · 0 评论 -
NSNotificationCenter的使用
1.添加监听- (void)addObserver:(id)observer selector:(SEL)aSelector name:(NSString *)aName object:(id)anObject;sample: [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(doSo原创 2013-10-15 16:37:29 · 1048 阅读 · 0 评论 -
IOS网络访问详解
第一、访问网络的方式同步请求:数据的请求过程是由主线程发起的,网络加载需要一定的时间,因此会堵塞主线程异步请求:数据的请求在多线程中完成同步请求无法取消,异步请求的过程中可以取消,同步请求无法监听加载进度,异步请求可以监听第二、访问网络的基本流程构造NSURL实例生成NSURLRequest请求通过NSURLConnection发送请求通过返回NSURLRespon原创 2013-10-31 14:27:45 · 1915 阅读 · 0 评论 -
使用block造成的内存泄露和block和delegate的区别
因为在block函数中会使调用对象retain,因此处理不当就容易造成内存泄露,如下语句: button.block=^(BlockButton *btn) { [self dismissViewControllerAnimated:YES completion:nil]; };block会使内部变量retain,从而内存泄露,解决该问题的方法是将变量用原创 2013-12-25 23:22:52 · 4258 阅读 · 0 评论 -
NSDate常用函数
NSDate *date=[NSDatedate]; NSLog(@"the date is %@",date); NSDate *yesterday=[NSDatedateWithTimeIntervalSinceNow:-(24*60*60)]; NSLog(@"yesterday is %@",yesterday);原创 2013-12-28 21:20:53 · 1164 阅读 · 0 评论 -
NSLog函数重写
跟C++的输出函数相比,NSlog函数有个很大的优势,就是它可以输出对象。在实际使用过程中,我们可以通过实现description函数来实现对NSLog函数的重写-(NSString*)description{ NSString *ret=[NSString stringWithFormat:@"name= %@,age=%@",self.name,self.age];原创 2013-11-14 14:35:58 · 2784 阅读 · 0 评论 -
@class指令的使用
@class指令能够减少编译时间,告诉编译器“相信我,你最终能了解这个名称的类”,可以减少不得不导入的头文件的数量。sample如下:#import @class car;@interface person :NSObject@property(nonatomic,retain)NSString *name;@property(nonatomic,retain)ca原创 2013-11-14 15:34:35 · 1173 阅读 · 0 评论 -
objective C++ 中KVO的基本用法
第一、基本概念KVO,即:Key-Value Observing,它提供一种机制,当指定的对象的属性被修改后,则对象就会接受到通知。该方法与NSNotification有很大的不同,它并不需要一个NotificationCenter来为所有观察者提供变化通知,相反的是,当有变化发生时,该通知直接发送给观察者,NSObject为我们实现了此方法。利用此方法我们可以观察对象,是一种一对多的原创 2013-11-08 14:28:11 · 1118 阅读 · 0 评论 -
利用blocks实现delegate方法
两个对象在通信时,利用block,其中一个类声明一个block,另一个类包含前一个类的对象,通过设置block函数,把回调函数的实现传递给第一个类dog.h#import @interface dog : NSObject{ @public int _ID; NSTimer *timer; int barkCount; void (^Ba原创 2013-11-05 18:03:39 · 1114 阅读 · 0 评论 -
IOS开发常用的调试命令
XCode4.0以后,编译器是LLVM,控制台调试命令前缀是lldb第一、LLVM简介LLVM是构架编译器(compiler)的框架系统,以C++编写而成,用于优化以任意程序语言编写的程序的编译时间(compile-time)、链接时间(link-time)、运行时间(run-time)以及空闲时间(idle-time),对开发者保持开放,并兼容已有脚本。第二、 对关注编译技术的开发人原创 2013-11-15 15:39:04 · 2792 阅读 · 0 评论 -
NSValue的用法
NSValue可以包装任意值,并且NSValue可以放在NSArray和NSDicionary中 + (NSValue *)valueWithBytes:(constvoid *)value objCType:(const char *)type;将值放入NSValue+ (NSValue *)value:(constvoid *)value withObjCT原创 2013-11-15 11:38:59 · 2934 阅读 · 0 评论