OC部分
第一部分 基本概念
OC概述
OC是一种能够完成复杂面向对象编程的简单的计算机设计语言。
通过提供用于定义类和方法的语法,它扩展了标准的c语言。它还提供了类和接口(任何类采用)的动态扩展。
面向对象编程
面向对象 和 面向过程
面向对象 OOP(Object Oriented Programming) 分解问题组成的对象 协调对象间的联系和通信 解决问题. 以对象为中心 也就是参数事件的参与者,设计对象的功能完成事件只是事物所有功能中的一小部分.
面向过程 POP (Procedure Oriented Programming) 分析解决问题的步骤 实现函数 依次调用. 事件为中心 关心该事件的详细步骤 一步一步如何完成实现.
类和对象
3.OC中类的定义
面向对象编程中使用对象完成程序
开发中:先定义类 ,在创建对象,然后使用对象。
定义类包含两部分“:接口部分和实现部分。分开写。
1.接口部分:对外声明类的特征和行为 提供外部访问的接口 相当于说明书。 写在 .h文件中
接口部分标志:@interface @end
作用: 声明类的实例变量和方法,即特征和方法
包含内容:类名 父类名 实例变量 方法。
(1)以@interface 接口开头 Person 当前类名 : NSObject 当前类继承的父类
(2)以@end//结束 只有把类的接口定义内容写在开始和结束之间才有效.
(3) People 类名
(4) : 表示继承 后面表示它有父类
(5) NSObject 父类名
2.实现部分:对内实现行为,相当于功能的实现。实现部分写在.m文件中
(1)以@implementation开头 以@end结束 实现内容必须写在中间才有效 (2)@implementation后的people是要实现的类(需要指定对哪些类实现)
实现部分标志:@
类和文件
类:@interface...@end 文件 @implemention…@end
文件:.h称为接口文件或者头文件 .m称为实现文件。
默认设置如下:
1.使用类命名文件
2..h文件管理类的接口部分,.m文件管理类的实现部分、
文件和类本质没有关系。为了方便管理实现封装性。
方法只.h文件中声明 没.m文件中定义实现
解决方法 :在.m文件里实现 或者在.h里删掉
OC中方法调用 采用消息发送机制[receiver message];
[receiver(接收者 是 类(+) 或者 对象(-)) message(消息)];
类和对象
protected 受保护的 默认的 实例变量只能在该本类和子类内部操作
private 私有的 实例对象只能在该类内访问,不可以在子类文件以及其他文件中访问.
实例变量定义在.h中 相当于先声明某一变量是某一类型的实例变量. 不设置可见度的时候,为默认的 受保护的 protected 定义方式
为什么不声明为@public :1. 外部就可以访问内部以及修改,会影响内部的一个实现,提供外不访问的接口.2.违背了OC三大面向对象的思想——封装 隐藏内部实现,提供外界访问的借口.
为什么不声明为@private :1.子文件访问不到,子文件还需另外声明.2.违背oc的继承父类有 子类就可以用
@public //单独
NSString name;//姓名
@private
NSString gender;//性别
@protected
NSInteger age;//年龄
类的定义
接口部分和文件实现部分可以写在main.m里 但需要写在main函数的外面 相当于函数的声明和实现
一个文件里可以有很多个类 只要符合 接口文件的声明和实现的框架就可以 和文件名没有关系 一般情况下 一个文件中就定义一个类 类的名字和文件同名
//.m里
@implementation aa
@end
//.h里
@interface aa : NSObject
{
NSString name;
NSString sex;
}
@end
unknown type name “women” 意思:不能识别的类型women 解决方案:#import头文件时,会将头文件中的内容复制一份,二档使用women这个类时,该类还未定义,所以识别不了.典型的循环导入问题. 解决方案 :使用该类时不能把它当做一个类来使用,所以在.h文件里使用@Class women;将women声明为一个字符串使用 ,但他不具有类中的内容,需要在.m里面#import “women.h”导入头文件
.n文件
NSString * NSStringFromRange (
NSRange range);
}
3.获取制定一个范围的字符串 substringWithRange Returns a string object containing the characters of the receiver that lie within a given range.
5.替换字符串 stringByReplacingOccurrencesOfString: withString: Returns a new string in which all occurrences of a target string in the receiver are replaced by another given string.
6.字符串比较 返回值为 枚举类型
Returns the result of invoking compare:options:range: with no options and the receiver’s full extent as the range.
7.将数字转为字符串对象
NSString *str12 = [NSString stringWithFormat:@"%f",5.2];//将5.2转换为字符串对象
1.字符串大小写转换
8.字符串的大小写转换函数
1.将@"lan ghasgda HGASIDHH JHFWIEFH J OU"全部转换成大写 uppercaseString Returns a uppercased(大写字母印刷 ) representation of the receiver.
(NSString *)uppercaseString 无参数 有返回值 消息传送机制
NSString *upperString = [@"lan ghasgda HGASIDHH JHFWIEFH J OU" uppercaseString];
NSLog(@"upperString = %@",upperString); 2.将@"lan SJA Hjknjkjnkdj sdjkjsd OU"全部转换成小写 lowercaseString Returns lowercased representation of the receiver.
NSMutableString 这里需要注意的是该方法的处理方式是在原字符串上直接进行修改
1.– appendFormat:
Adds a constructed string to the receiver.
添加一个字符串构造的接收器
2.– appendString:
Adds to the end of the receiver the characters of a given string.
增加了接收器的端部在给定的字符串的字符
(void)appendString:(NSString *)aString
NSMutableString *str = [NSMutableString stringWithFormat:@"lanouhenan”];
//2.在原字符串的基础上拼接Frank
[str appendString:@"Frank”];
NSLog(@"%@",str);// lanouhenanFrankFrank
•
•
• 3.– deleteCharactersInRange:
•
Removes from the receiver the characters in a given range.
从接收机中删除给定范围内的字符
NSMutableString *str = [NSMutableString stringWithFormat:@"lanouhenan”];
//3.删除字符串 在原字符串基础上删除
//如 删除 henan
[str deleteCharactersInRange:NSMakeRange(5, 5)];
NSLog(@"%@",str);//lanouhenanFrankFrank
•
•
• 4.– insertString:atIndex:
•
Inserts into the receiver the characters of a given string at a given location.
插入到接收器给定的字符串中的字符在给定的位置。
• 5.– replaceCharactersInRange:withString:
•
Replaces the characters from aRange with those in aString.
取代了aRange人物与那些在ASTRING。
• 6.– replaceOccurrencesOfString:withString:options:range:
•
Replaces all occurrences of a given string in a given range with another given string, returning the number of replacements.
替换在给定的范围内与其他给定的字符串给定的字符串的所有匹配,返回替换的数量。
• 7.– setString:
•
Replaces the characters of the receiver with those in a given string.
替换与一个给定的字符串中的接收器的特征。
(void)setString:(NSString )aString
NSMutableString str = [NSMutableString stringWithFormat:@"lanouhenan”];
注:本文中的所有代码需要前后结合来看.
数组的价值:(1)存数多个元素(2)存储元素只能是对象,对象可以是不同类型(3)数组是一个有序的集合(4)数组中的元素可以重复,而且重复的元素可以成为数组元素
NSArray 不可变数组对象
Creating an Array 利用便利构造器方法
返回的有序集合的最后一个对象。
7.indexOfObject:通过对象返回下标
Returns the index of the specified object.
返回指定对象的索引。
10.forin
快速遍历(快速枚举)
for (int i = 0; i NSString str4 = [arr2 objectAtIndex:i];
NSLog(@"%@",str4);
}
/
for (type object(数组元素类型 对象名字) in collection(集合即:要取元素的数组)) {
statements 输出语句
} forin 快速遍历,用于将集合中的元素遍历出来.
/
for (NSString *str4 in arr2) {
NSLog(@"%@",str4);
} NSMutableArray 可变的数组对象处理函数
首先创建数组对象,然后针对数组对象进行操作
//创建数组对象
NSMutableArray *arr1 = [[NSMutableArray alloc] initWithObjects:@"aa",@"bb",@"cc",@"vbvh"@"jd",@"jhsfcu",@"dfdh", nil];
1.addObject:
Inserts a given object at the end of the array.
2.insertObject:atIndex:
Inserts a given object into the array's contents at a given index.
5.replaceObjectsInRange:withObjectsFromArray:range:
Replaces the objects in the receiving array specified by one given range with the objects in another array specified by another range.
6.exchangeObjectAtIndex:withObjectAtIndex:
Exchanges the objects in the array at given indices.
7.sortUsingSelector:
Sorts the array’s elements in ascending order, as determined by the comparison method specified by a given selector.
//7.快速遍历
for (NSString *str5 in arr1) {
NSLog(@"%@",str5);
}
//如果数组中元素类型不同,输出时使用统一的泛型 id 可代表所有的对象类型.
for (id str5 in arr1) {
NSLog(@"%@",str5);
}
数值对象 NSNumber
1.numberWithChar:
Creates and returns an NSNumber object containing a given value, treating it as a signed char.
2.charValue
Returns the receiver’s value as a char.
上述具体结果如下:
2014-08-07 18:59:26.555 LessonNnumber[8367:303] (
102,
20,
100,
1000,
"12.345",
"10.2222",
1
)
2014-08-07 18:59:26.556 LessonNnumber[8367:303] 102
2014-08-07 18:59:26.557 LessonNnumber[8367:303] 20
2014-08-07 18:59:26.557 LessonNnumber[8367:303] 100
2014-08-07 18:59:26.558 LessonNnumber[8367:303] 1000
2014-08-07 18:59:26.558 LessonNnumber[8367:303] 12.345
2014-08-07 18:59:26.558 LessonNnumber[8367:303] 10.2222
2014-08-07 18:59:26.559 LessonNnumber[8367:303] 1
2014-08-07 18:59:26.559 LessonNnumber[8367:303] f
2014-08-07 18:59:26.559 LessonNnumber[8367:303] 20
2014-08-07 18:59:26.560 LessonNnumber[8367:303] 1
http://developer.51cto.com/art/201407/444542_1.htm
24.字典
1.字典 作用:(1)存储多个数据 (2)用来存储的数据具有一一对应关系(使用key和value来标识) (3)对于字典中的一对键值对叫做字典中的元素,也就一个条目,只要是对象就可以,不做具体的数据类类型的限制4.字典是无序的(字典中关键字key是唯一标示的 一个key只能对应一个value,一个value可以对应多个key)
2.创建不可变字典对象 {元素 ;号间隔}不可变的字典一旦创建就不能修改为只读模式.
1.便利构造器的方法 这里要注意:键值对是成对出现的 到nil结束
dictionaryWithObjectsAndKeys +号方法 用于创建一个对象 快速创建 Creates and returns a dictionary containing entries constructed from the specified set of values and keys.
(instancetype)dictionaryWithObjectsAndKeys:(id)firstObject, , ...
NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:@"zhgds",@"name",@20,@"hight",@12,@"age",nil];
NSLog(@"%@",dic); 2.初始化对象的方法 -号方法 开辟空间 初始化对象 initWithObjectsAndKeys Initializes a newly allocated dictionary with entries constructed from the specified set of values and keys.
(instancetype)initWithObjectsAndKeys:(id)firstObject, , ...
NSDictionary *dic1 = [[NSDictionary alloc] initWithObjectsAndKeys:@"zhgds",@"name",@20,@"hight",@12,@"age",nil];
NSLog(@"%@",dic1);
3.求字典中元素的个数 count Returns the number of entries in the dictionary.
NSArray *keys = [dic allKeys];
NSLog(@"%@",keys); 5.objectForKey 根据key获取对应的value 根据对象取值 类型一定要匹配
NSString name = [dic objectForKey:@"name"];
NSLog(@"%@",name);
NSNumber age = [dic objectForKey:@"age"];
NSLog(@"%@",age);
NSNumber *hight = [dic objectForKey:@"hight"];
NSLog(@"%@",hight);
7.创建可变字典对象 NSMutableDictionary
1.创建对象的两种方式 便利构造器和初始化
NSMutableDictionary dic = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"xiaoguang",@"guanggun1",@"xiaoshuai",@"guanggun2",@"xiaomeng",@"guanggun3", nil];
NSLog(@"%@",dic);
NSMutableDictionary dic1 = [[NSMutableDictionary alloc] initWithObjectsAndKeys:@"xiaoguang",@"guanggun1",@"xiaoshuai",@"guanggun2",@"xiaomeng",@"guanggun3", nil];
NSLog(@"%@",dic1);
2.求字典元素个数 同样是 count 返回值是一个整形的数
NSLog(@"%lu",[dic count]);
3.删除元素 removeObjectForKey removeAllObjects
[dic removeObjectForKey:@"guanggun1"];
NSLog(@"%@",dic);
[dic removeAllObjects];
NSLog(@"%@",dic);
4.添加元素 setObject需要特别注意 这里用的是set方法
[dic setObject:@"chengjie" forKey:@"guanggun1"];
NSLog(@"%@",dic);
5.修改key对应的value
[dic setObject:@"xiaocun" forKey:@"guanggun1"];
NSLog(@"%@",dic);
setObject:forKey:工作原理:根据指定key查找字典中是否存在相同的,若果存在则修改对应的value ,若果不存在,在字典中添加一个元素key-value键值对.
6.快速遍历 对于数组来说遍历到的是数组中的元素 对于字典来时遍历到的是key 一个key对应一个value 但value可以对应多个key
for (NSString *k in dic) {
//检索到key之后获取对应的value.
NSLog(@"%@",[dic objectForKey:k]);
}
25.集 集合类 NSSet 不可变集合
1.创建集合对象 两种方法 便利构造器 初始化方法 输出规范 {(元素,号间隔)} setWithObjects initWithObjects
NSSet set1 = [NSSet setWithObjects:@"1",@"2",@"3",@"4",@"5",@"6", nil];
NSLog(@"%@",set1);
NSSet set = [[NSSet alloc] initWithObjects:@"1dghdaj",@"2",@"3hsdflds",@"4",@"5",@"6", nil];
NSLog(@"%@",set);
2.获取元素个数 count
NSLog(@"%lu",[set count]);
3.获取集合的某个元素
NSString *str = [set anyObject];
NSLog(@"%@",str);
NSString *str1 = [set anyObject];
NSLog(@"%@",str1);
NSString *str2 = [set anyObject];
NSLog(@"%@",str2);
NSString *str3 = [set anyObject];
NSLog(@"%@",str3); 获取原则 :怎么方便怎么获取 可能是随机 但以上三种输出结果都一样 也不是随机 具体理解请参考API文档
4.判断集合中是否包含某个元素 containsObject
BOOL isExist = [set containsObject:@"2"];
NSLog(@"isExist = %d",isExist);
5.可变集合 创建对象两种方式 便利构造器 初始化
1.便利构造器 setWithObjects
NSMutableSet *set1 = [NSMutableSet setWithObjects:@"1",@"2",@"3",@"4",@"5",@"6", nil];
NSLog(@"%@",set1);
2.初始化方法
NSMutableSet *set1 = [[NSMutableSet alloc] initWithObjects:@"1",@"2",@"3",@"4",@"5",@"6", nil];
NSLog(@"%@",set1);
2.添加元素到集合中 利用 addObject:添加对象
[set1 addObject:@"6"];
NSLog(@"%@",set1);
3.移除集合中的对象的方法 removeObject
[set1 removeObject:@"5"];
NSLog(@"%@",set1);
26.排序高级
针对对象的不同属性的实例方法进行排序
1.main.m文件里
int main(int argc, const char argv[])
{
@autoreleasepool {
//创建四个对象
Person xiaoli = [[Person alloc]initWithName:@"xiaoli" age:18 height:172];
Person zhangsan = [[Person alloc] initWithName:@"zhangsan" age:20 height:175];
Person lisi = [[Person alloc] initWithName:@"lisi" age:21 height:168];
Person wangwu = [[Person alloc] initWithName:@"wangwu" age:24 height:182];
//将对象存入数组中.
NSArray arr = [NSArray arrayWithObjects:xiaoli,zhangsan,lisi,wangwu, nil];
//sortedArrayUsingSelector适用于升序排序以及系统自定义的类进行排序
//对数组对象按姓名升序排列
NSArray sortArrName =[arr sortedArrayUsingSelector:@selector(compareByName:)];
NSLog(@"%@",sortArrName);
//对数组对象按年龄升序排列
NSArray sortarrage = [arr sortedArrayUsingSelector:@selector(compareByAge:)];
NSLog(@"%@",sortarrage);
//对数组对象按身高升序排列
NSArray sortarrheight = [arr sortedArrayUsingSelector:@selector(compareByHeight:)];
NSLog(@"%@",sortarrheight);
//对数组对象按姓名降序排列
NSArray sortarrnameDesecending =[arr sortedArrayUsingSelector:@selector(compareByAge:)];
NSLog(@"%@",sortarrnameDesecending);
//对字符串数组进行排序
//block的排序方式适用于数组中的对象是系统类型时 并且是降序排列时
NSArray arr1 = [[NSArray alloc] initWithObjects:@"aa",@"bb",@"cc",@"dd",@"ee",@"ff", nil];
//1.对数组进行升序排序
NSArray sortArrAscending = [arr1 sortedArrayUsingSelector:@selector(compare:)];
NSLog(@"%@",sortArrAscending);
//1.对数组进行降序排序
NSString sortArrDescending =[arr1 sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
//对block匿名函数实现,比较方法
//将id 转为NSString类型
NSString str1 = (NSString )obj1;
NSString str2 = (NSString *)obj2;
//2.字符串比较
return -[str1 compare:str2];
}];
NSLog(@"%@",sortArrDescending);
}
return 0;
}
Person.h文件里
import@interface Person : NSObject
{
NSString *_name;// 姓名
NSInteger _age;//年龄
CGFloat _height;//身
}
//设置名字
Person .m 文件里
import "Person.h"@implementation Person
pragma mark - setter and getter//设置名字
//添加比较方法 compare NSComparisonResult枚举结果
//比较年龄
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/4729/viewspace-2800062/ ,如需转载,请注明出处,否则将追究法律责任。