类的基本概念
类:具有相同特征和相同行为的事物的抽象
类是一个抽象的概念,在生活中不具体
对象,是类的实例,也就是类的具体体现,是具体的,生活中的万物都是对象
类的接口部分的定义,写在 .h 文件中
方法声明:
如 - (void)”方法返回类型” say ”方法名” :(
NSInteger)”参数类型” x ”参数名” y ”参数名":(NSInteger)”参数类型” y”参数名”;
如果没有参数 -(void)say;
类的实现部分 , 写在 .m 文件中
类的实现,就是实现类的方法
消息 发送 机制
[ receiver(消息接收者) message(消息也就是OC的方法)]
接收者:类或者对象(- 对象接收 + 类接收)
消息:方法
Student *student = [Student alloc];
将
*student
间接的称为对象
通过[Student
alloc]
在堆区开辟的空间才是真正的对象
,
只不过对于指针变量s
tudent
存储堆区的首地址
,
通过它才能访问对象
,
所以我们把指针变量
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 用来存储函数 , 所以给B lock 变量赋值时赋的是整个函数的实现 int(^min)(int x, int y) = ^(int x, int y) {
return x + y;
};
当在B lock 内部使用外部定义的局部变量时 , 如果变量没有被B lock 修饰 , 则在B lock 内部不能对他修改 , 如果想修改 , 变量必须要有 _block 修饰 _Block
告诉编译器
,
编译时在B
lock
内部不要把外部变量当做常量使用
,
还是当做变量使用
如果在B
lock中
访问全局变量
,
就不需要B
lock
修饰
__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:
获得指定下标之前的字符串 , 从下标为零开始 , 但是不包括下标对应的字符 ( 下标从零开始)s ubstringToIndex:
字符串拼接
stringByAppendingFormat:
字符串替换 stringByReplacingFormat:
字符串比较 compare:
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:
获取元素个数 count
获取集合中某个元素个数 anyObject
判断集合中是否包含某个对象 containsObject:
添加元素 addObject:
删除元素 removeObject:
NSNumber常用函数
将基本数据类型转化为NSNumber类型的对象
如例,将字符类型基本数据转化为相应的NSNumber类型的对象
char a = 'f’;
NSNumber *a1 = [NSNumber numberWithChar:a];
将 NSNumber 类型的对象转为基本数据类型
char a2 = [a1 charValue];
NSNumber
对象比较 compare:
NSDate常用函数
求将来或者过去的日期
dateWithTimeIntervalSinc eNow:(时间间隔是以秒为单位)
获取两个日期的时间间隔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
类:具有相同特征和相同行为的事物的抽象
类是一个抽象的概念,在生活中不具体
对象,是类的实例,也就是类的具体体现,是具体的,生活中的万物都是对象
类的接口部分的定义,写在 .h 文件中
方法声明:
如 - (void)”方法返回类型”
如果没有参数 -(void)say;
类的实现部分 , 写在 .m 文件中
类的实现,就是实现类的方法
消息 发送 机制
[ receiver(消息接收者)
接收者:类或者对象(- 对象接收 + 类接收)
消息:方法
Student *student = [Student
通过[Student
初始化 ( 赋初值 )
设置器与访问器
设置器(以name为例)
- (void)setName:(NSString *)name;
- (void)setName:(NSString *)name
{
}
访问器(以name为例)
- (NSString *)name;
- (NSString *)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 用来存储函数 , 所以给B lock 变量赋值时赋的是整个函数的实现 int(^min)(int x, int y) = ^(int x, int y) {
};
当在B lock 内部使用外部定义的局部变量时 , 如果变量没有被B lock 修饰 , 则在B lock 内部不能对他修改 , 如果想修改 , 变量必须要有 _block 修饰
NSString常用函数
求字符串长度 length
获取字符串中的某个字符 characterAtIndex:
判断字符串是否以指定字符串开始或结束 -hasPrefix(开始),hasSuffix(结束)
查找指定字符串的范围
获得指定下标之前的字符串 , 从下标为零开始 , 但是不包括下标对应的字符 ( 下标从零开始)s ubstringToIndex:
字符串拼接
字符串替换 stringByReplacingFormat:
字符串比较 compare:
NSArray常用函数
初始化 initWithObjects:
获取元素个数count
获取指定下标元素objectAtIndex:
获取数组元素下标indexOfObject:
判断是否包含某个对象
数组排序sortedArrayUsingSelector
数组遍历,如下例
for (NSString *str in array1) {
添加元素
插入元素insertObject:
删除removeObjectAtIndex:
NSDictionary常用函数
初始化initWithObjectsAndKeys:
求字典中元素个数count
获取所有key
根据 key 获取相应的 value( 对应的类型要匹配) objectForKey:
字典快速遍历,如下例
添加元素
删除元素
修改key对应的元素setObject:forKey
NSSet常用函数
初始化
获取元素个数 count
获取集合中某个元素个数
判断集合中是否包含某个对象 containsObject:
添加元素
删除元素 removeObject:
NSNumber常用函数
将基本数据类型转化为NSNumber类型的对象
如例,将字符类型基本数据转化为相应的NSNumber类型的对象
char a = 'f’;
NSNumber *a1 = [NSNumber numberWithChar:a];
将 NSNumber 类型的对象转为基本数据类型
char a2 = [a1 charValue];
NSNumber
NSDate常用函数
求将来或者过去的日期
获取两个日期的时间间隔timeIntervalSinceDate:
比较两个日期的早晚 ,获取较早的earlierDate:
获取较晚的laterDate:
类的扩展
分类 , 类目 ,category 为没有源代码的类添加方法 ( 只添加方法 , 不添加实例变量 )
分类的定义格式 .@interface 开头
协议
协议
协议要让类服从 , 服从完协议之后 , 要实现协议的方法
内存管理
OC中采用引用计数机制,管理内存
内存管理基本原则 : 如果你对一个对象进行 alloc retain copy 之后 ,你就 拥有了该对象的所有权 , 你就必须对它进行 release 或者 autorelease.
只要调用了 alloc retain copy, 就进行 release
autorelease, 会将声明为 autorelease 的对象放入离他最近的自动释放池中 , 当自动释放池销毁时 , 会向池中的每一个对象 , 发送一个 release 消息
release,立即释放
当一个类的对象引用计数为零时 , 系统会自动调用该类的 dealloc 方法来回收空间 , 该方法是由系统自动调用 , 不能手动调用
当把一个对象放入一个集合中 ( 数组 , 字典 , 集合 )时, 会将对象的引用计数 +1, 因为内部做了 retain 操作当 collocection( 集合 , 字典 , 数组 ), 空间被回收时 , 他们会向容器 , 的每一个元素都发送一个 release 消息 ( 对应添加元素时的 retain 操作 ) 当从 collection( 数组 , 字典 , 集合 ), 中移除一个元素时 , 会 release 该对象 , 引用计数 -1