一、点语法
1、当用@property声明一个属性对象的时候,系统会为他自动制作一个_属性名称的成员变量
2、当我们用object.属性 = something,赋值的的时候,其实是再给_属性名的这个成员变量赋值
3、属性并没有得到值,当我们用object.属性 = something的时候,其实是在调用一个默认的setter方法,这个setter方法就给_属性名赋值了
4、当我们用object.属性取值时,取得是_属性名的值,这个时候.的作用起始是调用了一个默认的getter方法,这个getter方法就把_属性名的值取出来了
5、当我们调用点语法的时候,其实我们是在调用setter和getter方法
6、属性property的修饰符,在property和后面的属性之间的小括号里可以填写readonly,readWrite,nonatomic,atomic,setter,getter,assign,copy,retain
7、nonatomic,atomi原子性或者非原子性,原子性表示线程安全,但是运行慢,非原子性non,运行快。IOS当不涉及到线程操作的时候,一般都选择non,因为快
8、setter,getter,设置这个属性的setter方法和getter方法
//这里别加下划线
-(void)setMyAgeTo:(NSString*)newAge;
-(NSString*)getMyAge;
@synthesize age = _age,sex = _sex;
//目前可以不写这个,写这个目的,就是把age属性和_age成员变量进行关联
AnimalPoint *pp = [AnimalPoint alloc];
pp.age = @"18";
pp.sex = @"male";
//上面两行是赋值
NSLog(@"%@,%@",pp.age,pp.sex);//这是取值
二、继承
继承的特点
1、子类(DeskComputer)会拥有父类(Computer)的所有属性和方法
2、子类可以新增属性和方法,但是新增的方法不会影响父类
3、子类还可以修改(重写)父类的方法,重写后,子类再调用这个方法的时候,就会按照改后的方法来运行,但是不会影响父类
4、同等级的子类之间没有互相的关系
三、类别
1、类别的作用,是当基础类的方法不能满足我们当前需求的时候,就为基础类建一个类别,从而实现为基础类对象增加额外方法的功能
2、类别中的方法,基础类的对象能调用
#import "First.h"
3、类别的.h文件 由 @interface 基础类名 (类别的名字)
@interface First (Second)
First *first = [First alloc];
[first read];
[first write];
[first look];
//上面三个方法是First这个类本身就有的方法
//下面两个方法是First+Second这个类别给First额外添加的方法
[first sport];
[first walk];
4、为可变数组添加排序类别
#import "NSMutableArray+Sort.h"
@implementation NSMutableArray (Sort)
-(NSArray*)mutableSort
{
for(int i = 0;i<[self count]-1;i++)
{
for(int j = 0;j<[self count]-1;j++)
{
if([[self objectAtIndex:j] compare:[self objectAtIndex:j+1]] >0)
{
[self exchangeObjectAtIndex:j withObjectAtIndex:j+1];
}
}
}
return self;
}
@end
5、为不可变数组添加排序类别
-(NSArray*)unMuSort
{
//先把self,赋值给一个mutableArray
//NSMutableArray *muArr = [NSMutableArray arrayWithCapacity:0];
//for(NSString *temp in self)
//{
//[muArr addObject:temp];
//}
NSMutableArray *muArr = [NSMutableArray arrayWithArray:self];
for(int i = 0;i<[muArr count]-1;i++)
{
for(int j = 0;j<[muArr count]-1;j++)
{
if([[muArr objectAtIndex:j] compare:[muArr objectAtIndex:j+1]] >0)
{
[muArr exchangeObjectAtIndex:j withObjectAtIndex:j+1];
}
}
}
return muArr;
}
@end
课后作业:
1、建一个类,这个类有两个成员变量,一个是_name,一个是_age,完成这两个变量的setter方法和getter方法
2、建一个类,这个类有两个属性,一个是name,一个是age
3、使用类别的方式,完成一个数组排序的功能(可变数组)
4、做一个人类,有一个属性“性别”,有一个方法“吃”,做一个子类,男人类,多一个属性“喉结”,多一个方法爱打架。
5、做一个Car类,做一个Benz类,做一个BYD类,Benz和BYD继承Car
Car有一个属性:NSString *price
有一个方法:-(void)run; 实现:nslog@“run”
Benz类 增加一个属性:NSString *type
修改 run方法为 nslog@“fast run”
BYD类 增加一个属性:NSString *color
修改run 方法为 nslog@“slow run”
增加一个方法,-(void)manHandle;nslog@“手动”
6、做NSString的类别,里面有几个方法
A、判断是否有http前缀,真则打印ok,假则打印fail
B、判断字符串内容,如果等于success,打印:成功,如果等于can’t find,打印:没有,如果等于fail,打印:失败
7、做NSArray的类别,里面有几个方法
A、向这个数组增加一个字符串的对象
B、比较一个数组是否与@[@“a”,@“b”,@“c”]完全一样,如果不一样,打印不一样的index
8、做字典的类别,里面有几个方法
A、获取字典的所有的key,遍历查找字典的所有value,判断每个value是不是字符串,如果是打印这个字符串,如果不是,判断是数组还是字典,如果是数组,打印:数组,如果是字典,打印:错误