黑马程序员——OC基础知识
2015-11-02 17:49
369 查看
——- android培训、java培训、期待与您交流! ———-
类是一个抽象的概念,在生活中不具体
对象,是类的实例,也就是类的具体体现,是具体的,生活中的万物都是对象
类的接口部分的定义,写在.h文件中
如果没有参数
类的实现部分,写在.m文件中
类的实现,就是实现类的方法
一般用一下格式:
接收者:类或者对象(- 对象接收 + 类接收)
消息:方法
通过[Student alloc]在堆区开辟的空间才是真正的对象,只不过对于指针变量student存储堆区的首地址,通过它才能访问对象,所以我们把指针变量studen叫做对象(但是真正的对象是堆区空间,student本质是一个指针变量)
初始化(赋初值)
访问器(以name为例)
设置器用来为实例变量赋值,访问器用来取实例变量的值
属性
只需在.h文件中声明如下属性
相当于设置器与访问器,系统自动生成,直接调用即可,默认生成的实例变量可见度为私有
(retain assign copy为语义属性,声明对象时使用retain copy,声明为基本数据类型时用assign)
继承的使用:将多个类中相同的实例变量和方法提出来写成一个公共的父类.通过继承,子类可以使用父类的实例变量和方法,并且可以添加自己的实例变量和方法.同时可以改写父类的方法.
Block变量的初值,Block用来存储函数,所以给Block变量赋值时赋的是整个函数的实现
当在Block内部使用外部定义的局部变量时,如果变量没有被Block修饰,则在Block内部不能对他修改,如果想修改,变量必须要有_block修饰 _Block告诉编译器,编译时在Block内部不要把外部变量当做常量使用,还是当做变量使用 如果在Block中访问全局变量,就不需要Block修饰 __Block int b = 10;(双下划线)
获取字符串中的某个字符 characterAtIndex:
判断字符串是否以指定字符串开始或结束-hasPrefix(开始),hasSuffix(结束)
查找指定字符串的范围 rangeOFString,返回类型为NSRange(结构体类型),操作的为副本.获取给定下标值后的子串,包含指定下标对应的字符串(下标从零开始) stringWithFormat:
获得指定下标之前的字符串,从下标为零开始,但是不包括下标对应的字符(下标从零开始)substringToIndex:
字符串拼接stringByAppendingFormat:
字符串替换stringWithFormat:
字符串比较 compa:
获取元素个数count
获取指定下标元素objectAtIndex:
获取数组元素下标indexOfObject:
判断是否包含某个对象 containsObject:
数组sortedArrayUsingSelector:
数组遍历,如下例
添加元素 addObject:
插入元素insertObject:
删除removeObjectAtIndex:
求字典中元素个数count
获取所有key allKeys
根据key获取相应的value(对应的类型要匹配)objectForKey:
字典快速遍历,如下例
添加元素 setObject:
删除元素 removeObjectForKey:
修改key对应的元素setObject:forKey
获取元素个数coun
4000
t
获取集合中某个元素个数 anyObject
判断集合中是否包含某个对象containsObject:
添加元素 addObject:
删除元素removeObject:
如例,将字符类型基本数据转化为相应的NSNumber类型的对象
将NSNumber类型的对象转为基本数据类型
char a2 = [a1 charValue];
NSNumber 对象比较 compare:
获取两个日期的时间间隔timeIntervalSinceDate:
比较两个日期的早晚 ,获取较早的earlierDate:
获取较晚的laterDate:
将日期格式串,转换为NSData对象,如下例
分类的定义格式.@interface开头 + 扩展的类名(分类名)@end结
协议要让类服从,服从完协议之后,要实现协议的方法
内存管理基本原则:如果你对一个对象进行alloc retain copy之后,你就拥有了该对象的所有权,你就必须对它进行release或者autorelease.
只要调用了alloc retain copy,就进行release 或者autorelease
autorelease,会将声明为autorelease的对象放入离他最近的自动释放池中,当自动释放池销毁时,会向池中的每一个对象,发送一个release消息
release,立即释放
当一个类的对象引用计数为零时,系统会自动调用该类的dealloc方法来回收空间,该方法是由系统自动调用,不能手动调用
当把一个对象放入一个集合中(数组,字典,集合)时,会将对象的引用计数+1,因为内部做了retain操作当collocection(集合,字典,数组),空间被回收时,他们会向容器,的每一个元素都发送一个release消息(对应添加元素时的retain操作)当从collection(数组,字典,集合),中移除一个元素时,会release该对象,引用计数-1
类的基本概念
类:
具有相同特征和相同行为的事物的抽象。类是一个抽象的概念,在生活中不具体
对象,是类的实例,也就是类的具体体现,是具体的,生活中的万物都是对象
类的接口部分的定义,写在.h文件中
方法声明:
类的方法声明如下:- (void)"方法返回类型"say"方法名":(NSInteger)"参数类型" x "参数名" y "参数名":(NSInteger)"参数类型"y"参数名”;
如果没有参数
-(void)say;
类的实现部分,写在.m文件中
类的实现,就是实现类的方法
一般用一下格式:
[ receiver(消息接收者) message(消息也就是oc的方法)]
接收者:类或者对象(- 对象接收 + 类接收)
消息:方法
Student *student = [Student alloc]; //将*student间接的称为对象
通过[Student alloc]在堆区开辟的空间才是真正的对象,只不过对于指针变量student存储堆区的首地址,通过它才能访问对象,所以我们把指针变量studen叫做对象(但是真正的对象是堆区空间,student本质是一个指针变量)
初始化(赋初值)
Student *student = [[student alloc] init ];
设置器与访问器
设置器(以name为例)- (void)setName:(NSString *)name; - (void)setName:(NSString *)name { self = [super init]; if(self != nil) { _name = name; } return self; }
访问器(以name为例)
-(NSString *)name; -(NSString *)name { return _name; }
设置器用来为实例变量赋值,访问器用来取实例变量的值
属性
只需在.h文件中声明如下属性
@property(nonatomic, retain)NSString *name; @property(nonatomic, retain)NSString *sex; @property(nonatomic, assign)NSInteger age;
相当于设置器与访问器,系统自动生成,直接调用即可,默认生成的实例变量可见度为私有
(retain assign copy为语义属性,声明对象时使用retain copy,声明为基本数据类型时用assign)
继承
继承:当多个类出现部分相同实例变量和方法时,就要考虑用继承继承的使用:将多个类中相同的实例变量和方法提出来写成一个公共的父类.通过继承,子类可以使用父类的实例变量和方法,并且可以添加自己的实例变量和方法.同时可以改写父类的方法.
BLOCK的使用
Block允许嵌套定义,定义时最后加 ; 返回值可以省略Block变量的初值,Block用来存储函数,所以给Block变量赋值时赋的是整个函数的实现
int(^min)(int x, int y) = ^(int x, int y) { return x + y; };
当在Block内部使用外部定义的局部变量时,如果变量没有被Block修饰,则在Block内部不能对他修改,如果想修改,变量必须要有_block修饰 _Block告诉编译器,编译时在Block内部不要把外部变量当做常量使用,还是当做变量使用 如果在Block中访问全局变量,就不需要Block修饰 __Block int b = 10;(双下划线)
int (^min)(int x,int y) = ^(int x, int y){ b = 15; a = 20; return x - y };
NSString常用函数
求字符串长度 length获取字符串中的某个字符 characterAtIndex:
判断字符串是否以指定字符串开始或结束-hasPrefix(开始),hasSuffix(结束)
查找指定字符串的范围 rangeOFString,返回类型为NSRange(结构体类型),操作的为副本.获取给定下标值后的子串,包含指定下标对应的字符串(下标从零开始) stringWithFormat:
获得指定下标之前的字符串,从下标为零开始,但是不包括下标对应的字符(下标从零开始)substringToIndex:
字符串拼接stringByAppendingFormat:
字符串替换stringWithFormat:
字符串比较 compa:
NSArray常用函数
初始化 initWithObjects:获取元素个数count
获取指定下标元素objectAtIndex:
获取数组元素下标indexOfObject:
判断是否包含某个对象 containsObject:
数组sortedArrayUsingSelector:
数组遍历,如下例
for (NSString *str in array1) { NSLog(@"%@", str) }
添加元素 addObject:
插入元素insertObject:
删除removeObjectAtIndex:
NSDictionary常用函数
初始化initWithObjectsAndKeys:求字典中元素个数count
获取所有key allKeys
根据key获取相应的value(对应的类型要匹配)objectForKey:
字典快速遍历,如下例
for (NSString *key in dic) { NSLog(@"%@", [dic objectForKey:key]); }
添加元素 setObject:
删除元素 removeObjectForKey:
修改key对应的元素setObject:forKey
NSSet常用函数
初始化 initWithObjects:获取元素个数coun
4000
t
获取集合中某个元素个数 anyObject
判断集合中是否包含某个对象containsObject:
添加元素 addObject:
删除元素removeObject:
NSNumber常用函数
将基本数据类型转化为NSNumber类型的对象如例,将字符类型基本数据转化为相应的NSNumber类型的对象
char a = 'f’; NSNumber *a1 = [NSNumber numberWithChar:a];
将NSNumber类型的对象转为基本数据类型
char a2 = [a1 charValue];
NSNumber 对象比较 compare:
NSDate常用函数
求将来或者过去的日期 dateWithTimeIntervalSinceNow:(时间间隔是以秒为单位)获取两个日期的时间间隔timeIntervalSinceDate:
比较两个日期的早晚 ,获取较早的earlierDate:
获取较晚的laterDate:
将日期格式串,转换为NSData对象,如下例
NSString *str = @"2014年05月01日 10点23分18秒"; NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setDateFormat:@"yyyy年MM月dd日 HH点mm分ss秒"]; //将格式字符串转换为NSData对象 (dateFromString:) NSDate *d = [formatter dateFromString:str]; NSLog(@"%@", d);
类的扩展
分类,类目,category为没有源代码的类添加方法(只添加方法,不添加实例变量) 是扩展一个类的功能的方式之一,为原有类的扩展的方法会成为原类的一部分,使用即可分类也分为.h(接口部分),以及.m(实现部分).h文件中填写声明的方法,.m文件中填写方法的实现分类的定义格式.@interface开头 + 扩展的类名(分类名)@end结
协议
协议 就相当于任务清单,规定所要做的操作(只有一系列方法的声明)谁服从协议,谁就要实现清单中的方法(完成任务清单的任务),所以协议只有.h文件,没有.m文件协议要让类服从,服从完协议之后,要实现协议的方法
内存管理
OC中采用引用计数机制,管理内存内存管理基本原则:如果你对一个对象进行alloc retain copy之后,你就拥有了该对象的所有权,你就必须对它进行release或者autorelease.
只要调用了alloc retain copy,就进行release 或者autorelease
autorelease,会将声明为autorelease的对象放入离他最近的自动释放池中,当自动释放池销毁时,会向池中的每一个对象,发送一个release消息
release,立即释放
当一个类的对象引用计数为零时,系统会自动调用该类的dealloc方法来回收空间,该方法是由系统自动调用,不能手动调用
当把一个对象放入一个集合中(数组,字典,集合)时,会将对象的引用计数+1,因为内部做了retain操作当collocection(集合,字典,数组),空间被回收时,他们会向容器,的每一个元素都发送一个release消息(对应添加元素时的retain操作)当从collection(数组,字典,集合),中移除一个元素时,会release该对象,引用计数-1
相关文章推荐
- Python动态类型的学习---引用的理解
- 土人系列AS入门教程 -- 对象篇
- C#托管堆对象实例包含内容分析
- C#实现获取不同对象中名称相同属性的方法
- javascript asp教程第十一课--Application 对象
- PowerShell中使用Out-String命令把对象转换成字符串输出的例子
- VBS教程:对象-正则表达式(RegExp)对象
- C#检查指定对象是否存在于ArrayList集合中的方法
- sql2008启动代理未将对象应用到实例解决方案
- C#编程自学之类和对象
- C++中对象的常引用、动态建立和释放相关知识讲解
- php中将一个对象保存到Session中的方法
- php对象和数组相互转换的方法
- PHP中把对象转换为关联数组代码分享
- C#写入对象或集合类型数据到xml文件的方法
- C#利用反射来判断对象是否包含某个属性的实现方法
- ASP.NET中使用Application对象实现简单在线人数统计功能
- asp提示Server 对象 错误 ASP 0178 : 80070005
- Javascript 对象的解释
- JavaScript对象、属性、事件手册集合方便查询