1.isMemberOfClass 和 isKindOfClass 联系与区别
isKindOfClass 用于确定一个对象是一个类的成员,或者是否是一个类的派生类的成员
isMemberOfClass 用于确定一个对象是否是一个类的成员
2.id和instencetype的区别
instencetype 可以返回方法所在类的类型
比如:
@interface TTTestTool : NSObject
+ (id)testToolWithNowTime;
+ (instancetype)testToolWithNowTime;
@end
+ (instancetype)testToolWithNowTime;
该方法返回的就是TTTestTool类型的。
而+ (id)testToolWithNowTime;
返回的就是ID类型的。
需要注意的是:
根据Cocoa的命名规则,满足下述规则的方法:
(1)类方法中,以alloc或new开头
(2)实例方法中,以autorelease,init,retain或self开头
会返回一个方法所在类类型的对象,这些方法就被称为是关联返回类型的方法。换句话说,这些方法的返回结果以方法所在的类为类型。
也就是说如果你写了一个-(id)init;方法,虽然用了id,但还是返回的是方法所属类的类型。
3. SEL和IMP是什么,有什么区别
SEL是方法编号
IMP是函数指针,指向方法地址
联系:IMP可以通过SEL来构造出来,同一个SEL可以对应多个IMP。因为同一个SEL在不同的对象中对应不同的方法实现。
举个例子:
//在 TTTestTool和TTAlgorithmTool都有function1方法
TTTestTool *ttTest = [TTTestTool new];
SEL methId = @selector(function1);
IMP imp1 = [ttTest methodForSelector:methId];
imp1();
TTAlgorithmTool *ttAlgo = [TTAlgorithmTool new];
IMP imp2 = [ttAlgo methodForSelector:methId];
imp2();
//log
// 这里是TTTestTool类~~~
// 这里是TTAlgorithmTool类~~
总结:通过同一个SEL构造出连个IMP,分别调用到不同类中的方法
4.如何实现准确定时器
有篇文章写的很好:http://blog.lessfun.com/blog/2016/08/05/reliable-timer-in-ios/
这里贴出代码:
网友评论