Object-c基础
文章平均质量分 59
看不见的城市
这个作者很懒,什么都没留下…
展开
-
oc的set方法内存管理
OC的内存管理是针对的是继承自NSobject的对象,对基本数据类型无效,通过引用计数器来管理内存,当我们使用alloc retian new copy的时候计数器就加1必须使用release释放内存,创建者自己释放自己创建的对象,retain alloc new copy都要release 谁想拥有谁retain。重复release一个已经释放的对象,会发生野指针错误原创 2014-01-28 19:53:02 · 1543 阅读 · 0 评论 -
集合使用NSArray、NSSet、NSDictionary的使用
NSArra继承自NSobject对象,为了解决存储不同类型的多个元素,其实更像是Java中的List,只能放OC对象,不能直接存放基本数据类型,也不能存放空值,不可变 ,arrayWithObjects这个方法初始化数组的时候里面的nil值不能删除,代表数组终止标记,不是数组元素。基本使用和循环void array(){ //只能放OC对象,不能原创 2014-02-01 19:23:36 · 2967 阅读 · 0 评论 -
NSValue与数据类型
NSValue可以包装所有的数据类型,而前一篇博客写到的NSNumber也是继承自NSValue,在API中我们可以发现,实际上是用了分类进行了扩充,因为集合中需要的是OC对象,所以我们使用的基本数据类型和结构体都可以使用NSValue进行包装,再丢给集合。 CGPoint p=CGPointMake(20,10); //@encode(C原创 2014-02-02 11:38:01 · 1123 阅读 · 0 评论 -
NSObject常用方法
NSObject相当于Java中的基类object。 Student *stu=[[[Studentalloc]init]autorelease]; //返回对象的所有信息 Class c=[stu class];//Class c=[Student class]; //判断对象是否属于某个类的实例原创 2014-02-02 13:38:56 · 917 阅读 · 0 评论 -
copy语法
OC提供了强大copy语法,让我们copy一个对象作为副本,改变副本对象而不影响原来的对象,而copy分为深拷贝也就是内容拷贝,用于可变类型的拷贝,拷贝之后会产生新的对象,计数器为1,还有就是浅拷贝也就是地址拷贝,用于不可变的对象拷贝,因为对象本身不可变,在copy的时候,源对象会被直接返回并不会创建新的对象,拷贝后计数器加1。只有不可变对象copy为不可变对象的时候才是浅拷贝。原创 2014-02-02 15:43:18 · 1606 阅读 · 0 评论 -
block和指针函数
block代码块和指针函数在定义上只有一个符号的细微差别,至于灵活性和使用场景,具体问题具体分析,block比较灵活。#import #import "Student.h"int sumAb(int a,int b){ return a+b;}void testBlock(){ //定义一个block类型原创 2014-01-31 16:20:45 · 911 阅读 · 0 评论 -
oc中的常用结构体
OC中的很多类型都是对一个或多个类型进行包装再组合成一个新的结构体,在用typedef起一个别名,然后就变成了新的类型,当然在开发中,我们自己也会定义很多的结构体。/**常用结构体**/void structTest(){ /******范围******/ // typedef struct _NSRange { //原创 2014-02-01 15:50:17 · 2256 阅读 · 0 评论 -
NSMutableString的使用
NSMutableString是oc中的可变字符串和Java中的stringbuilder一样,如果你要经常修改一个字符串的内容,那么最好使用NSMutableString,这样性能更高void mutbaleString(){ NSMutableString *str=[NSMutableStringstringWithFormat:@"cooljune原创 2014-02-01 16:45:38 · 1336 阅读 · 0 评论 -
NSDate的使用
NSDate是OC中的时间类型,和Java中的Date一样,而对时间进行格式化处理的NSDateFormatter就像Java中simpledateformat,对时间进行格式化输出或者对一个字符串时间转换成时间格式。基本使用NSDate *date=[NSDatedate]; NSLog(@"date=%@",date);原创 2014-02-02 12:09:59 · 1324 阅读 · 0 评论 -
ARC使用和注意点
ARC(Automatic reference counting)管理,是为了提高开发者的效率,节省编写内存管理的代码,让开发者更关心自己的业务,并没有真正的自动内存管理,而是编译器在编译前会检查代码,判断对象是否被强指向,如果有指针强指向这个对象,那么这个对象就不会被回收。区别强指针和弱指针分别用__strong和__weak,默认所有对象的指针都是强指针,而在我们对象模型构建的时候,如果一原创 2014-01-31 19:27:53 · 1428 阅读 · 0 评论 -
NSString使用
NSString继承自NSObject对象,在OC中作为字符串类型,就像Java中的string一样,值得注意的是:系统自带的对象都有一个和对象方法相同的类方法完成相同的功能,也就是说有一个静态方法和一个动态方法,而且静态方法不用我们管理内存,所以开发中都用静态方法。基本使用和文件读取void createString(){ NSString *s原创 2014-02-01 15:40:31 · 1259 阅读 · 0 评论 -
ARC兼容NoARC
在xcode5.0以后,我们创建的项目默认就是ARC项目,如果要改为NoARC,只需修改automatic reference counting 为NO就可以了,Xcode也为老的arc项目提供了便捷,一键转为arc项目。我们点中项目然后,点击edit-->Refactor(重构)-->convert to objectc arc,这种重构方式相当于xcode会取检测代码中的内存管理代码,然后原创 2014-02-01 09:54:08 · 1364 阅读 · 0 评论 -
protocol协议
oc中的协议很像Java中的接口,定义一组约定俗成的规范,让其他类来实现,而protocol主要是为了监视这个对象的活动信息,这样看起来到像是数据库端的触发器了,一旦满足某个规则,我就执行某个事件。#import @class MessageCenter;//定义一个消息中心的协议@protocol MessageDelegate NSObjec原创 2014-01-29 16:40:55 · 1352 阅读 · 0 评论 -
id ,NSObject, id<NSObject>区别
我们经常会混淆以下三种申明(我是没有留意过): 1. id foo1; 2. NSObject *foo2; 3. id foo3; 第一种是最常用的,它简单地申明了指向对象的指针,没有给编译器任何类型信息,因此,编译器不会做类型检查。但也因为是这样,你可以发送任何信息给id类型的对象。这就是为什么+alloc返回id类型,但调用[[Foo alloc]转载 2014-01-29 10:08:15 · 1363 阅读 · 0 评论 -
'release' is unavailable: not available in automatic reference counting mode解决方案
Xcode创建项目的时候,编译器默认加了Automatic Reference Counting以下简称ARC,帮助我们快捷的管理内存而不用自己手动管理,而对于初学者来说,应该使用no arc来学习object-c内存管理的本质。 而在arc模式下,我们手动释放内存,就会出现如下错误:'release' is unavailable: not available in automatic原创 2014-01-27 19:51:01 · 3031 阅读 · 0 评论 -
oc中的构造方法和description方法
oc和其他面向对象语言一样,也支持构造方法,当我们初始化一个对象的时候传入这个构造方法需要的值,而oc中的description方法相当于Java中的tostring方法都来自于父类。#import @interface Person :NSObject{ int _age; int _no;}- (int)age;-(v原创 2014-01-27 21:33:10 · 1762 阅读 · 0 评论 -
@class和#import的区别
如果在.h文件中我们要用到某个类那么我们就用@class引入声明是一个类,而不用#import,因为在声明的时候并不需要了解引入类的成员变量和方法,等在.m文件中实际用到方法和成员变量的时候再用#import导入,因为#import是完全拷贝,会包含所有信息,会造成性能下降,而如果是继承某个类,就要使用#import导入继承类所在的头文件,因为要知道类里面声明的方法,避免重复声明和父类同样的方法和原创 2014-01-28 21:50:13 · 701 阅读 · 0 评论 -
@property与内存管理以及可传参数
1.在用@property声明的时候传入retian这个参数@property (retain)Book *book; //代表该成员变量会进行内存管理也就是在编译的时候会在.m文件中生成如下代码,先release旧的,再retain新的-(void)setBook:(Book *)book{ if(_book!=book){原创 2014-01-28 22:04:45 · 1158 阅读 · 0 评论 -
初识object-c中的类
Oc中的关键字都以@开头,#import //判断前面有没有包含该文件,如果包含,就不会包含,而在C语言中用#include,每次都会使用#ifndef判断是否存在。OC中的类 .h文件就是类的声明文件,用于声明变量、方法,很像Java中的接口声明 .m文件是类的实现文件,用于实现.h中的方法oc中方法的定义和Java看起来很不一样,刚开始看还不是很习惯,(类型)原创 2014-01-27 20:20:28 · 1009 阅读 · 0 评论 -
property和synthesize
property和synthesize 是编译器为了开发者写更少的垃圾重复代码而提高开发效率,依赖于编译器的环境,很像Java中的注解,也需要在jdk5.0以后才可以使用,@property主要是在.h文件中声明setter和Getter方法,而@synthesize是在.m文件中实现标准的setter和Getter方法。@property#import原创 2014-01-28 11:40:49 · 1557 阅读 · 0 评论 -
@autoreleasepool内存管理
虽然OC提供了@autoreleasepool这样方便快捷管理内存的方案,但它并不像Java一样能够全自动化,很多时候还是需要我们自己手动释放内存。自动释放池是OC里面的一种内存回收机制,一般可以将一些临时变量添加到自动释放池中,统一回收释放,当自动释放池销毁时,池里面的所有对象都会调用一次release,也就是计数器会减1,但是自动释放池被销毁了,里面的对象并不一定会被销毁。原创 2014-01-29 10:15:59 · 1768 阅读 · 0 评论 -
OC与Category 分类
Category 分类,动态为已经存在的某个类动态添加方法,为以前的类扩展方法,但是不能添加成员变量,实现了类的相关方法的模块化,把不同的类的方法分配到不同的分类文件中,就像在Java开发中的struts或者spring配置文件模块化一样,便于分模块开发,并且可以扩展OC基础类库中的类。#import@interface Student :NSObject原创 2014-01-29 10:52:42 · 1285 阅读 · 0 评论 -
block代码块
block代码块看起来语法很怪异,简单来说它就是一个很灵活的代码块,在你想调用的时候在调用。#import @class Button;typedefvoid (^ButtonBlock) (Button *btn);@interface Button :NSObject@property (nonat原创 2014-01-29 17:33:33 · 818 阅读 · 0 评论 -
kvc和kvo
oc为操作对象属性提供了两种方法来间接操作属性,kvc就是利用键值对来改写对象的属性值,类似字典,而kvo则提供了监控对象的某个属性值发生改变。kvc and kvoPerson *p=[[Person alloc]init]; PersonObserver *ob=[[PersonObserver alloc] init]; Bo原创 2014-02-23 11:42:19 · 1068 阅读 · 0 评论