博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Objective-C基础2
阅读量:5311 次
发布时间:2019-06-14

本文共 2141 字,大约阅读时间需要 7 分钟。

16.继承

1)不能和父类定义一样的变量

2)单一继承,不支持继承多个类

3)支持多层继承子类也可以被继承

17.实例变量修饰符

public:公开的,在其他类中也可以访问

protected:受保护的类型,只能在当前类和子类中访问

private:不能直接访问

.h文件中没有声明的变量和方法,只在.m文件中定义,不能被继承和使用

18.%@打印对象的地址,默认调用对象的description方法,可以重写此方法

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 
@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;}

 

转载于:https://www.cnblogs.com/fanglove/p/4935202.html

你可能感兴趣的文章
Fine Uploader文件上传组件
查看>>
javascript中的传递参数
查看>>
objective-c overview(二)
查看>>
python查询mangodb
查看>>
consonant combination
查看>>
驱动的本质
查看>>
Swift的高级分享 - Swift中的逻辑控制器
查看>>
Swagger简单介绍
查看>>
Python数据分析入门案例
查看>>
vue-devtools 获取到 vuex store 和 Vue 实例的?
查看>>
Linux 中【./】和【/】和【.】之间有什么区别?
查看>>
内存地址对齐
查看>>
看门狗 (监控芯片)
查看>>
css背景样式
查看>>
JavaScript介绍
查看>>
开源网络漏洞扫描软件
查看>>
yum 命令跳过特定(指定)软件包升级方法
查看>>
创新课程管理系统数据库设计心得
查看>>
Hallo wolrd!
查看>>
16下学期进度条2
查看>>