16.继承xcode
1)不能和父类定义同样的变量spa
2)单一继承,不支持继承多个类指针
3)支持多层继承子类也能够被继承code
17.实例变量修饰符orm
public:公开的,在其余类中也能够访问对象
protected:受保护的类型,只能在当前类和子类中访问blog
private:不能直接访问继承
.h文件中没有声明的变量和方法,只在.m文件中定义,不能被继承和使用ip
18.%@打印对象的地址,默认调用对象的description方法,能够重写此方法get
19.多态:不一样的对象以本身的方式响应相同名称方法的能力称为多态
父类指针指向子类的对象
20.类的本质是类对象
1)Class c1=[d class];Class c1=[d1 class];若是d和d1是同一个类的对象,那个c1和c2指向相同的地址
2)获取方式,经过实例对象获取Class c1=[d class];,经过类名获取Class c1=[Dog class];
3)类对象的使用,代替类名new对象
21.SEL s1=@selector(test)//手动把test方法包装成sel类型
[p performSelector:s1];//向test方法发送sel消息,这两句话至关于[p test];
22.点语法的本质是调用getter、setter方法,不是访问成员变量
对象.属性=...;//替换为set方法
...=对象.属性;//替换为get方法
23.@property的使用
写在声明文件中,至关于定义get、set方法声明
#import <Foundation/Foundation.h>
@interface Animal : NSObject
{
int _age;
}
@property int age;
//-(void)setAge:(int)age;
//-(int)age;
@end
24.@synthesize的使用
写在实现文件中至关于注释部分的代码
#import "Animal.h"
@implementation Animal
@synthesize age;
//-(void)setAge:(int)age{
// self->age=age;//@synthesize age会自动新建一个age实例变量
//}
//-(int)age{
// return self->age;
//}
@end
@synthesize age=_age;//指定实例变量名,不会操做默认的变量
至关于:
//-(void)setAge:(int)age{
// _age=age;
//}
//-(int)age{
// return _age;
//}
xcode4.4以后,能够只使用@property而不使用@systhesize,而且不用定义带有下划线的变量
操做的是带有下划线的实例变量,若是当前类没有下划线的实例变量,则系统会帮咱们生成。注意该变量是私有的(相对的,隐藏的)子类看不到
@property的加强型,在.m文件中重写get、set方法,可是不能同时重写,只能重写一个
25.动态类型和静态类型
动态类型:父类的指针指向子类的对象
静态类型:
26.id的使用,id是一个万能指针,能够指向任何对象
NSObject和id均可以指向任何对象
NSObject对象会进行编译时检查(须要强制类型转换)
id不须要强制类型转换,id能够直接用
编译器看到id之后,认为是动态类型,再也不检查
id obj=[Animal new];
27:动态绑定,内省
动态类型检测:
1)判断类型
1))判断某个对象是不是类的实例对象,或者子类的事例对象
BOOL isKind = [ani isKindOfClass:[Animal class]];(对象和类)
2))判断是不是这个类的事例,无论是不是这个类的子类的事例
isMemberOf(对象和类)
3))判断是不是子类的事例
isSubClassOfClass
BOOL isKind = [Dog isSubClassOfClass:[Animal class]];(类和类)
2)方法响应的检测
1))判断对象可否响应指定的方法:
respondsToSelector:方法的SEL
2))判断类可否响应指定的方法
instanceResponseToSelector:方法的SEL
3)响应方法
无参:performSelector:SEL
有一个参数:performSelector:SEL withObject:@"参数"
有两个参数:performSelector:SEL withObject:@"参数" withObject:@"参数2"
28.构造方法init,是一个对象方法,返回的是一个对象-调用init方法的对象
29.重写构造方法
-(instancetype)init{
self = [super init];
if(self){
_age=10;
}
return self;
}