你是否接触过OC中的反射机制?简单聊一下概念和使用
1). class反射
通过类名的字符串形式实例化对象。
Class class = NSClassFromString(@"student");
Student *stu = [[class alloc] init];
将类名变为字符串。
Class class =[Student class];
NSStringclassName = NSStringFromClass(class);
2). SEL的反射
通过方法的字符串形式实例化方法。
SEL selector = NSSelectorFromString(@"setName");
[stu performSelector:selector withObject:@"Mike"];
将方法变成字符串。
NSStringFromSelector(@selector
(setName:));
如何访问并修改一个类的私有属性?
1). 一种是通过KVC获取。
2). 通过runtime访问并修改私有属性。
如何实现视图的变形?
答:通过修改view的 transform 属性即可。
你是怎么封装一个view的
1). 可以通过纯代码或者xib的方式来封装子控件2). 建立一个跟view相关的模型,然后将模型数据传给view,通过模型上的数据给view的子控件赋值/**
* 纯代码初始化控件时一定会走这个方法
*/- (instancetype)initWithFrame:(CGRect)frame {if(self= [superinitWithFrame:frame]) { [selfsetupUI]; }returnself; }/**
* 通过xib初始化控件时一定会走这个方法
*/- (id)initWithCoder:(NSCoder*)aDecoder {if(self= [superinitWithCoder:aDecoder]) { [selfsetupUI]; }returnself; } - (void)setupUI {// 初始化代码}
请简单的介绍下APNS发送系统消息的机制
APNS优势:杜绝了类似安卓那种为了接受通知不停在后台唤醒程序保持长连接的行为,由iOS系统和APNS进行长连接替代。
APNS的原理:
1). 应用在通知中心注册,由iOS系统向APNS请求返回设备令牌(device Token)
2). 应用程序接收到设备令牌并发送给自己的后台服务器
3). 服务器把要推送的内容和设备发送给APNS
4). APNS根据设备令牌找到设备,再由iOS根据APPID把推送内容展示
OC有多继承嘛?没有的话可以用什么方法替代?
*多继承即一个子类可以有多个父类,它继承了多个父类的特性
*OC的类没有多继承,只支持单继承,如果要实现多继承的话,可以通过类别和协议的方式来实现。
*protocol(协议) 可以实现多个接口,通过实现多个接口可以完成多继承。
*Category(类别)一般使用分类,用category去重写类的方法仅对本category有效,不会影响到其他类与原有类的关系。
分别描述类别(categories)和延展(extensions)是什么?以及两者的区别?继承和类别在视线中有何区别?为什么categories只能为对象添加方法,却不能添加成员变量?
* 类别:在没有原类.m文件的基础上,给类添加方法
* 延展:一种特殊形式的类别,主要在一个.m文件里声明和实现延展的作用,就是给某个类添加私有方法和私有变量。
* 区别:
延展可以添加属性并且它添加的方法是必须要实现的。延展可以认为是一个私有的类目
类别可以在不知道,不改变原来代码的情况下往里面添加新的方法,只能添加,不能删除修改
并且如果类别和原来类中的方法产生名称冲突,则类别将覆盖原来的方法,应为类别具有更高的优先级
继承可以增加,修改删除方法,添加属性。
* Category只能为对象添加方法,却不能添加成员变量的原因:如果可以添加成员变量,添加的成员变量没有办法初始化。
OC中有私有方法嘛?私有变量呢?如果没有的话,有没有什么代替的方法?
* OC类里面的方法有两种,静态方法和实例方法,但是可以通过把方法的生命和定义都放在.m文件中来实现一个表面上的私有方法,有私有变量,可以通过@private来修饰,或者把生命放到.m文件中,在oc中,所有实例变量默认都是私有的,所有实例方法默认都是公有的。
创建一个对象需要经过哪三个步骤?
* 开辟内存空间
* 初始化参数
* 返回内存地址值
结构体中能定义OC对象嘛?
* 不能,因为结构体当中只能是类型的声明不能进行分配空间。
对于Objective-C,你认为它最大的优点和最大的不足是什么?对于不足之处,现在有没有可用的方法绕过这些不足来实现需求。如果可以的话,你有没有考虑或者实践过重新实现OC的一些功能,如果有,具体会如何做?
答:最大的优点是它的运行时特性,不足是没有命名空间,对于命名冲突,可以使用长命名法或特殊前缀解决,如果是引入的第三方库之间的命名冲突,可以使用link命令及flag解决冲突。
网友评论