博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS技术小结
阅读量:4296 次
发布时间:2019-05-27

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

iOS技术小结

1. 在iOS中,OC的方法签名是什么?

在 iOS 中,决定 OC 的方法签名的因素有

  • 方法类型:(类方法(+)、实例方法(-))
  • 方法名称
  • 参数个数

而与方法的返回值参数类型无关。

2. A类和A类的实例对象,监听一个相同名称的通知,两者会相互影响么?

两者不会相互影响,推送通知时的参数指定了是类或者类的实例对象接收通知,因为在方法签名的影响因素中,方法类型是其中一个因素,所以当两个方法的方法名称相同,参数个数相同,方法类型不同时,那么这两个方法是不同方法。

3. 静态变量声明在方法的内部和外部有什么区别?

  • 当静态变量声明在方法内部,则所有调用该方法的对象共享该变量;
  • 当静态变量声明在方法外部,则整个类共享该变量;

4. .h文件中和.m文件中的类扩展中能有相同的属性名称或变量名称么?

两个文件中相同的类扩展不能有同名的变量,可以有相同名称的属性,但是该属性在.h文件中必须是只读的,而在.m文件中必须是可读可写的。

5. 在不同线程注册通知,推送通知时,接收到通知的对象的方法是在哪个线程执行的?

  • 子线程注册监听方法,主线程推送通知,主线程执行了方法
  • 子线程注册监听方法,子线程推送通知,推送通知的子线程执行了方法
  • 主线程注册监听方法,子线程推送通知,子线程执行了方法
  • 主线程注册监听方法,主线程推送通知,主线程执行了方法

可知,在哪个线程推送的通知,监听到该通知的对象的方法就在哪个线程执行,并且当一个对象注册了多少次相同的通知时,其不会覆盖,推送一次通知时,注册的方法就会执行多少次。

6. 块代码的声明和定义的格式有什么区别?

  • 当声明 block 代码时,必须有变量名,此时符号 ^ 必须在括号内且在 block 返回类型之后,而变量名在符号 ^ 之后或者在声明语句的最后,声明时,返回类型不可省略,参数可为空,但参数的括号不能省略;
  • 当定义block代码时,没有变量名,此时符号 ^ 必须在定义语句的开始位置,之后的返回值类型和参数均可省略;
  • 对于内联的 block ,在定义时可以直接调用
NSString * a = ^ NSString *(NSString *string){	return string;}(@"hello world");

7. UIView实例对象在调用drawRect:方法之前,会先判断其属性frame的值,只有在frame的宽高不为零时才执行,且不应该在该方法中修改该实例对象的frame和bounds属性值

8. 对于同一个设备,iOS系统会根据bundleID以区分不同的应用

9. 一个按钮绑定多个事件时,当点击按钮时,事件的执行的顺序如何确定?

  • 用代码添加的点击事件,按事件的添加顺序进行响应
  • 在XIB文件中连线添加点击事件时,比较方法的签名(比较时包含 ‘ : ’),按其结果从小到大进行响应
  • 在实际加载时,XIB是要先进行加载的资源,其中的点击事件会先添加,所以XIB连线添加的点击事件是先于代码添加的点击事件响应的
  • 对于一个方法可以绑定到多个按钮,但是,多次绑定到同一个按钮时,会覆盖上一次的绑定(包含XIB中的连线绑定),即该事件并不会多次响应,但是其执行顺序会发生改变,以最后一次添加为准

测试代码如下:

- (instancetype)init{	self = [super init];	if (self) {   		self = [[[NSBundle mainBundle]loadNibNamed:@"TestView" owner:nil options:nil]lastObject];	}    	[self.button addTarget:self action:@selector(btnClicked2:) forControlEvents:(UIControlEventTouchUpInside)];    	[self.button addTarget:self action:@selector(btnClicked1:) forControlEvents:(UIControlEventTouchUpInside)];    	[self.button addTarget:self action:@selector(btnClicked2:) forControlEvents:(UIControlEventTouchUpInside)];    	return self;}			- (IBAction)btnClicked3:(id)sender{    NSLog(@"%s",__FUNCTION__);}	- (IBAction)btnClicked4:(id)sender{    NSLog(@"%s",__FUNCTION__);}- (IBAction)btnClicked2:(id)sender{    NSLog(@"%s",__FUNCTION__);}- (IBAction)btnClicked1:(id)sender{    NSLog(@"%s",__FUNCTION__);}	- (IBAction)abtnClicked3:(id)sender{    NSLog(@"%s",__FUNCTION__);}	- (IBAction)btnClicked0:(id)sender{    NSLog(@"%s",__FUNCTION__);}	-(IBAction)btnClicked33:(id)sender{    NSLog(@"%s",__FUNCTION__);}-(IBAction)btnClicked33333333:(id)sender{    NSLog(@"%s",__FUNCTION__);}-(IBAction)bbtnClicked4:(id)sender{    NSLog(@"%s",__FUNCTION__);}-(IBAction)bbtnClickedb:(id)sender{    NSLog(@"%s",__FUNCTION__);}	-(IBAction)bbtnClickedbb:(id)sender{    NSLog(@"%s",__FUNCTION__);}-(IBAction)bbtnClickedbbbbb:(id)sender{    NSLog(@"%s",__FUNCTION__);}-(IBAction)bbtnClicked123bb:(id)sender{    NSLog(@"%s",__FUNCTION__);}-(IBAction)bbtnClicked1245bbbbb:(id)sender{    NSLog(@"%s",__FUNCTION__);}	-(IBAction)bbtnClicked123bbbbbb:(id)sender{    NSLog(@"%s",__FUNCTION__);}-(IBAction)bbtnClicked1235bbbbb:(id)sender{    NSLog(@"%s",__FUNCTION__);}

测试结果如下:

2017-03-19 00:20:51.182 MyfirstIOSAPP[2334:165227] -[TestView abtnClicked3:]2017-03-19 00:20:51.183 MyfirstIOSAPP[2334:165227] -[TestView bbtnClicked1235bbbbb:]2017-03-19 00:20:51.183 MyfirstIOSAPP[2334:165227] -[TestView bbtnClicked123bb:]2017-03-19 00:20:51.184 MyfirstIOSAPP[2334:165227] -[TestView bbtnClicked123bbbbbb:]2017-03-19 00:20:51.184 MyfirstIOSAPP[2334:165227] -[TestView bbtnClicked1245bbbbb:]2017-03-19 00:20:51.184 MyfirstIOSAPP[2334:165227] -[TestView bbtnClicked4:]2017-03-19 00:20:51.184 MyfirstIOSAPP[2334:165227] -[TestView bbtnClickedb:]2017-03-19 00:20:51.185 MyfirstIOSAPP[2334:165227] -[TestView bbtnClickedbb:]2017-03-19 00:20:51.185 MyfirstIOSAPP[2334:165227] -[TestView bbtnClickedbbbbb:]2017-03-19 00:20:51.185 MyfirstIOSAPP[2334:165227] -[TestView btnClicked0:]2017-03-19 00:20:51.185 MyfirstIOSAPP[2334:165227] -[TestView btnClicked33333333:]2017-03-19 00:20:51.186 MyfirstIOSAPP[2334:165227] -[TestView btnClicked33:]2017-03-19 00:20:51.186 MyfirstIOSAPP[2334:165227] -[TestView btnClicked3:]2017-03-19 00:20:51.186 MyfirstIOSAPP[2334:165227] -[TestView btnClicked4:]2017-03-19 00:20:51.187 MyfirstIOSAPP[2334:165227] -[TestView btnClicked1:]2017-03-19 00:20:51.189 MyfirstIOSAPP[2334:165227] -[TestView btnClicked2:]

10. 在不同文件中可以声明并定义同名的分类,若一个类的同名或不同名分类中存在相同的方法,那么后加载的实现方法会覆盖先加载的实现方法,即在 build phases -> compile sources 的文件列表中,后引入的文件中的实现方法会覆盖前一个文件中的同名分类方法。如果两个同名的方法在同一个文件中,那么在文件中靠后的方法会覆盖靠前的方法。另外,如果分类中的方法和主类中的方法同名,那么分类中的方法会覆盖主类中的方法。

11. 宏的 #if 条件判断,只有 0 表示为假,其他如负数,字符都表示真。

转载地址:http://ptdws.baihongyu.com/

你可能感兴趣的文章
克罗谈投资策略03_你所期望的赌博方式
查看>>
克罗谈投资策略04_感觉与现实
查看>>
通向财务自由之路01_导读
查看>>
通向财务自由之路02_成功的决定因素:你
查看>>
中低频量化交易策略研发01_引言
查看>>
中低频量化交易策略研发06_推进的择时策略
查看>>
史丹·温斯坦称傲牛熊市的秘密
查看>>
期货市场技术分析01_理论基础
查看>>
期货市场技术分析02_趋势的基本概念
查看>>
期货市场技术分析03_主要反转形态
查看>>
期货市场技术分析04_持续形态
查看>>
期货市场技术分析05_交易量和持仓兴趣
查看>>
TB交易开拓者入门教程
查看>>
TB创建公式应用dll失败 请检查用户权限,终极解决方案
查看>>
python绘制k线图(蜡烛图)报错 No module named 'matplotlib.finance
查看>>
talib均线大全
查看>>
期货市场技术分析06_长期图表和商品指数
查看>>
期货市场技术分析07_摆动指数和相反意见理论
查看>>
满屏的指标?删了吧,手把手教你裸 K 交易!
查看>>
不吹不黑 | 聊聊为什么要用99%精度的数据回测
查看>>