①(语法篇)、《史上最全iOS八股文面试题》2022年|①(语法篇)、《史上最全iOS八股文面试题》2022年,金三银四我为你准备了,iOS《1000条》笔试题以及面试题(包含答案)
iOS面试题 一共分为笔试题
和面试题
两部分笔试题
一共分为10个 总共613题面试题
一共400题
笔试题 一个10个系列 分别为
①(语法篇) 共147题 已更新
②(常识篇) 共72题 已更新
③(界面篇) 共83题 已更新
④(iOS篇) 共52题 已更新
⑤(操作篇) 共68题 已更新
⑥(数据结构篇) 共23题 已更新
⑦(多线程篇) 共60题 已更新
⑧(网络篇) 共22题 已更新
⑨(多媒体篇) 共59题 已更新
⑩(安全篇) 共27题 已更新
面试题
一共分为3个 总共400题
?(面试篇 1/3) 共127题 已更新
?(面试篇 2/3) 共137题 已更新
?(面试篇 3/3) 共136题 已更新
文章图片
@TOC
笔试题 613题 ??①、笔试题-语法篇(147题) 1.与alloc相对应的方法是:[单选题]
- [ ] A、alloc
- [x] B、dealloc
- [ ] C、release
- [ ] D、autorelease
- [ ] A、alloc
- [ ] B、dealloc
- [x] C、release/autorelease
- [ ] D、copy
- [x] A、正确
- [ ] B、错误
- [x] A、正确
- [ ] B、错误
- [ ] A、引用计数(retuanCount)降为-1
- [ ] B、引用计数(retuanCount)降为1
- [ ] C、引用计数(retuanCount)降为2
- [x] D、引用计数(retuanCount)降为0
- [x] A、方法
- [ ] B、属性
- [ ] C、动作
- [ ] D、协议
- [ ] A、动作
- [x] B、方法
- [x] C、属性
- [ ] D、协议
- [x] A、@optional
- [ ] B、@required
- [ ] C、@none
- [ ] D、@userful
- [ ] A、NSNull
- [ ] B、NSInterger
- [ ] C、NSString
- [x] D、NSObject
- [x] A、正确
- [ ] B、错误
autorelease
的作用是:[多选题]- [x] A、将对象放入自动释放池
- [x] B、将对象的引用计数减1
- [x] C、延后调用release方法
- [ ] D、立即调用release方法
-(void)setName:(Nsstring)NewName{ self.name = NewName}
:被调用的结果是:[单选题]- [ ] A、设置name属性的值
- [x] B、程序死循环
- [ ] C、获取name属性的值
- [ ] D、复制name属性的值
KVC
中通用的属性访问器方法是那两个:[多选题]- [x] A、valueForKey:
- [x] B、setValue:forKey:
- [ ] C、getValueForKey:
- [ ] D、SetValue:
nil
在Objective-C中表示:[单选题]- [x] A、一个空对象
- [ ] B、一个空指针
- [ ] C、一个空字符
- [ ] D、一个空字节
#import
和#include
的区别是: #import
可以避免文件被多次引用?:[判断题]- [x] A、正确
- [ ] B、错误
- [ ] A、正确
- [x] B、错误
- [ ] A、可以
- [x] B、不可以
Objective-C关键字说明18.在Objective-C中,类的成员变量默认被申明为:[单选题]
@private作用范围只能在自身类
@protected作用范围在自身类和继承自己的子类,什么都不写,默认是此属性。
@public作用范围最大,在任何地方
@package不会被导出到外部, 所以任何试图在这个framework外面访问这些成员变量的类都会得到一个链接错误的结果.
- [ ] A、@private
作用范围只能在自身类
- [x] B、@protected
作用范围在自身类和继承自己的子类,什么都不写,默认是此属性。
- [ ] C、@public
作用范围最大,在任何地方
- [ ] D、@package
不会被导出到外部, 所以任何试图在这个framework外面访问这些成员变量的类都会得到一个链接错误的结果.
- [ ] A、Objective-C不支持异常处理
- [ ] B、在Objective-C++中,Objective-C的异常处理能够捕获C++的异常
- [x] C、在Objective-C++中,Objective-C的异常不能捕获到C++的异常
- [ ] D、在Objective-C++中,Objective-C和C++的异常处理可以相互捕获异常
dealloc
方法中,关于[super dealloc]
:语法说法正确的是:[单选题]- [ ] A、[super dealloc]; 有没有都可以
- [ ] B、[super dealloc]; 应该放在dealloc方法内的第一行
- [x] C、[super dealloc]; 应该放在dealloc方法内的最后一行
- [ ] D、[super dealloc]; 位置无所谓,只要在dealloc方法里有就可以
[[[object method1]method2] method3:[object method4]];
中的method调用的顺序是:[单选题]- [ ] A、1 2 3 4
- [x] B、1 2 4 3
- [ ] C、4 1 2 3
- [ ] D、4 3 2 1
(Automatic Reference Counting)
模式下,下面那个方法是未被禁用的:[单选题]- [ ] A、retain
- [x] B、copy
- [ ] C、release
- [ ] D、autorelease
initWithContentsOfFile
方法进行构造的是:[单选题]- [ ] A、NSString
- [x] B、NSXMLParser
- [ ] C、NSDicttionary
- [ ] D、NSData
(retainCount)
加一:[多选题]- [x] A、alloc
- [ ] B、init
- [x] C、retain
- [x] D、copy
- [x] A、C
- [x] B、Objective-C
- [x] C、C++
- [ ] D、Swift
(Singletion)
模式:[多选题]- [x] A、FileManager
- [x] B、NotificationCenter
- [x] C、Application
- [x] D、Device
NSArray
数组的有:[多选题]- [ ] A、BOOL
- [x] B、NSInteger
- [x] C、NSString
- [x] D、NSArray
枚举
对比循环
访问的优点,下面说法正确的是:[多选题]- [x] A、使用快速枚举效率更高
- [x] B、语法更简洁
- [x] C、使用更安全
- [ ] D、职场更多的数据类型
自定义的头文件
应该使用:[单选题]- [ ] A、#include
- [ ] B、#include<>
- [x] C、#import“”
- [ ] D、#import<>
实现的协议
方法使用那个关键字声明:[单选题]- [ ] A、@property
- [ ] B、@interface
- [x] C、@required
- [ ] D、@protocol
升序排序
的判断条件:[单选题]- [x] A、- (NScomparisonResult)compareWithNumberForAscendSort:(Student)otherStudent
- [ ] B、- (NSinteger)compareWithNumberForAscendSort:(Student)otherStudent
- [ ] C、- (BOOL)compareWithNumberForAscendSort:(Student)otherStudent
- [ ] D、- (int)compareWithNumberForAscendSort:(Student)otherStudent
只可以被本类和其子类访问
,需要下列那个修饰符:[单选题]- [ ] A、@public
- [ ] B、@private
- [x] C、@protected
- [ ] D、@friendly
- [x] A、所有的集合都可以添加元素。
- [ ] B、集合分为可变集合、不可变集合。
- [ ] C、数组,字典额NSSet这三种集合存储数据的方式不同。
- [ ] D、所有集合都能保存id类型数据。
NSDictionary *dict = [NSDictionary dictionaryWithObject:@"a value" forKey:@"aKey"];
NSLog(@"%@",[dict objectForKey:@"aKey"]);
输出什么 :[单选题]- [ ] A、a value
- [ ] B、akey: a value
- [x] C、崩溃信息
- [ ] D、a vlaue : akey
- [x] A、NSLog()
- [ ] B、Printf()
- [ ] C、NSPrintf()
- [ ] D、scanf()
- [ ] A、0
- [ ] B、1
- [x] C、2
- [ ] D、3
@synthesize
配合使用 :[单选题]- [ ] A、@end
- [ ] B、@interface
- [ ] C、@implementation
- [x] D、@property
- [x] A、NSObject
- [ ] B、NSNull
- [ ] C、NSCoding
- [ ] D、UIView
NSMutableDictionary *people = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"张三",@"左护法", nil];
:[单选题]- [x] A、[people removeObjectForKey:@"左护法"];
- [ ] B、[people removeObject:@"张三"];
- [ ] C、[people removeObjectAtIndex:0];
- [ ] D、[people removeAllObjects];
- [ ] A、NSLog(@“%s”,This is Objective-C program.);
- [x] B、NSLog(@“%@”,This is Objective-C program.);
- [ ] C、NSLog(@“This is Objective-C program.",%@);
- [ ] D、D.NSLog(@“This is Objective-C program.",%@);
协议与委托
的描述不正确的是 :[单选题]- [ ] A、委托是iOS的一种设计模式
- [ ] B、协议里的方法默认是必须实现的
- [x] C、类接受了多个协议,这些协议写在父类后面的<>内,多个协议之间用"."隔开
- [ ] D、定义协议使用@protocol关键字
协议
描述不正确的是 :[单选题]- [ ] A、协议分正式和非正式协议。
- [ ] B、在要求确认协议的类必须实现协议中的方法时,可以使用@required。
- [ ] C、一个协议可以被多个类确认。
- [x] D、协议中声明的方法,默认是@optional的。
类
概念的描述中,错误的是 :[单选题]- [ ] A、类是抽象数据类型的实现
- [ ] B、类是具有共同行为若干对下的统一描述提
- [ ] C、类是创建对象的模板
- [x] D、类就是C语言中的结构体类型
属性的正确声明方式
:[单选题]- [ ] A、@property(nonatomic,retain) NSString *myString;
- [ ] B、@property(nonatomic,assign) NSString *myString;
- [x] C、@property(nonatomic,assign) Int myNumber;
- [ ] D、@property(nonatomic,retain) Int myNumber;
NSString *name= [[NSString alloc]initWithString:@"张三"];
NSLog(@"%d",[name retainCount]);
以上代码输出的内容是多少:[单选题]- [x] A、-1
- [ ] B、0
- [ ] C、1
- [ ] D、2
- [ ] A、release
- [ ] B、alloc
- [x] C、autorelease
- [ ] D、retain
委托
最好声明成:[单选题]- [ ] A、retain
- [x] B、assign
- [ ] C、copy
- [ ] D、readonly
- [ ] A、delegate
- [ ] B、assign
- [x] C、retain
- [ ] D、dealloc
类
的接口声明
关键字为:[单选题]- [ ] A、@import
- [x] B、@interface
- [ ] C、@implemention
- [ ] D、@protocol
- [ ] A、-(id)setName:(NSString )name :(NSString )setAge:(Int)age
- [x] B、setName:name :sex age:age
- [ ] C、setName::age:
- [ ] D、setName:name:age:
- [ ] A、[@"2C青年" stringByAppendingOfString:@"2B" withString:@"有为"];
- [x] B、NSRange range = {0,2}; [@"2C青年" stringByReplacingCharacterInRange:rangWithString:@"有为"];
- [ ] C、NSRange range = {1,2}; [@"2C青年" stringByReplacingCharacterInRange:rangWithString:@"有为"];
- [ ] D、[@"2C青年" stringByReplacingOccurrencesOfString:@"有为" withString:@"2C"];
- [ ] A、目标动作对:当两个对象之间有比较紧密的关系时,如视图控制器与其下的某个视图。
- [x] B、代理:也叫委托,当某个对象收到多个事件,并要求同一个对象来处理所有事件时。委托机制必须依赖某个协议定义的方法来发送消息
- [ ] C、通知机制:当需要多个对象或两个无关对象处理同一个事件时。
- [ ] D、Block: 适用于回调只发送一次的简单任务。
- [ ] A、.c
- [ ] B、.cpp
- [x] C、.mm
- [ ] D、.m
声明一个类
所要用到的编译指令是:[单选题]- [x] A、@interface SonmeClass
- [ ] B、@protocol SonmeClass
- [ ] C、@implementation SonmeClass
- [ ] D、@autorelease SonmeClass
- [x] A、init
- [ ] B、isKindOfClass
- [ ] C、responseToSelector
- [ ] D、isKindOfClass
protocol
时,声明一组可选择
实现与否的函数,需要在声明的前一行加上:[单选题]- [ ] A、@required
- [x] B、@optional
- [ ] C、@interface
- [ ] D、@protocol
#import
和#include
的描述正确的是:[单选题]- [x] A、#import是#include的替代指令,防止重复引用
- [ ] B、#import和#include不可以混合使用
- [ ] C、#import只用于引用Objective-C的文件,#include 只用于引用C和C++的文件
- [ ] D、#import和#include的使用效果完全相同
异同
:[单选题]- [ ] A、if (str1 == str2) xxx;
- [x] B、if ([str1 isEqualToString str2]) xxx;
- [ ] C、if (str1 && str2) xxx;
- [ ] D、if ([str1 length] == [str2 length]) xxx;
私有方法
吗?有私有变量
吗?:[单选题]- [ ] A、有私有方法和私有变量
- [ ] B、没有私有方法和私有变量
- [x] C、没有私有方法,有私有变量
- [ ] D、有私有方法,没有私有变量
delegate(代理)
的作用不正确的是:[单选题]- [ ] A、delegate中的函数在其他类中实现
- [ ] B、主要用于不同类型的对象之间一对一传递消息
- [ ] C、没有指派则不会触发
- [x] D、可以一个对象的delegate指派给多个其他类型的对象
- [ ] A、readwrite 是可读可写特性;需要生成getter方法和setter方法时;
- [ ] B、readonly 是只读特性;只会生成getter方法。不会生成setter方法,不希望属性在类外改变
- [x] C、assign 是赋值特性,和weak一样,可用weak代替。
- [ ] D、retain 表示 持有特性;setter方法将传入参数先保留,在赋值。传入参数的retaincount 会 + 1;
NSString *obj = [[NSData alloc]init];
obj在编译时
和运行时
,分别是什么类型的对象:[单选题]- [x] A、编译时时NSString的类型;运行时是NSData类型的对象
- [ ] B、编译时时NSObject的类型;运行时是NSData类型的对象
- [ ] C、编译时时NSData的类型;运行时是NSString类型的对象
- [ ] D、编译时时NSObject的类型;运行时是NSString类型的对象
类别
的作用,说法不正确的是:[单选题]- [ ] A、将类的实现分散到多个不同文件或多个不同框架中。
- [ ] B、创建对私有方法的前向引用。
- [ ] C、向对象添加非正式协议。继承可以增加,修改或者删除方法。
- [x] D、不能添加属性。
Block
不允许修改外部变量的值
:[判断题]- [x] A、正确
- [ ] B、错误
block
定义正确的是:[单选题]- [x] A、typedef void(^SuccessBlock) (BOOL success);
- [ ] B、typedef void(^SuccessBlock) (NSStringvalue,BOOL success);
- [ ] C、typedef void^(SuccessBlock) (NSStringvalue,BOOL success);
- [ ] D、typedef void^(SuccessBlock) (NSString *value);
类方法
的使用描述,错误的是:[单选题]- [ ] A、类方法可以调用类方法
- [ ] B、类方法不可以调用实例方法。但是类方法可以通过创建对象访问实例方法
- [x] C、类方法不可以使用实例变量,包括sef(可以使用self)
- [ ] D、类方法作为消息,可以被发送到类或者对象里面去
- [ ] A、NSArray array = @[1,2,3; NSNumber number = array[3]; // @[@“1”,@“2”,@“3”]
- [ ] B、NSDictionary *dict = @{@"key":nil} // value不能为空
- [x] C、NSString str = nil; NSString *str = [str substringFromIndex:3];
- [x] D、NSString str = "hi"; NSString str = [str substringFromIndex:3];
常量
和变量
,以下说法正确的是:[多选题]- [x] A、常量所只想的是一个特定类型的值。如数组8或者字符"Swift"
- [x] B、你可以使用 lei 关键字定义一个常量,使用关键字var 定义一个变量
- [ ] C、常量和变量在使用前不需要定义(声明)。
- [x] D、变量的值可以根据需要不断进行修改,二常量的值一经定义,是不能够被修改的。
- [x] A、print
- [ ] B、printIn
- [x] C、debugPrint
- [x] D、dump
注释
,以下说法正确的是:[多选题]- [x] A、序言注释的内容主要包含模块的接口、数据的描述和模块的功能;
- [x] B、功能性注释主要包含程序段的功能、语句的功能和数据的状态。
- [x] C、单行注释使用//表示
- [x] D、多行注释使用/*...*/来表示
布尔类型的值
只能是true或者false?:[判断题]- [x] A、正确
- [ ] B、错误
- [ ] A、正确
- [x] B、错误
- [ ] A、正确
- [x] B、错误
- [x] A、浮点数值是具有小数部分的浮点数,比如3.1415 和 -0.228。
- [x] B、相对比证书来说,浮点数类型表示更广的数值范围,储存更大或者更小的数字。
- [x] C、Double 表示64位浮点数,在浮点数需要更大或者特别精准的时候,可使用此类型。
- [x] D、Float表示32位浮点数。在不需要64位精度的时候可使用此类型。
转义符
,以下描述正确的是:[多选题]- [x] A、\表示反斜杠
- [x] B、\n表示换行符
- [x] C、\r表示回车符
- [x] D、\t 表示制表符
Switch
条件判断语句描述正确的是:[多选题]- [x] A、Switch语句会尝试把某个值与若干个条件进行匹配。
- [x] B、Switch语句都由多个case构成,每一个case 都是代码执行的一条分支。
- [ ] C、和Objective-C相同的是。在Swift中。你需要为case分支添加break语句。
- [x] D、当条件判断的情况比较多时,通常用Switch语句替换if语句。
continue
语句,用来告诉用户一次循环体停止本次的循环,并立即进入下次的循环:[判断题]- [x] A、正确
- [ ] B、错误
case
分支后,跳到下一个case
分支中。:[单选题]- [ ] A、continue
- [ ] B、break
- [x] C、fallthrough
- [ ] D、goto
数组
,描述错误的是:[单选题]- [ ] A、组成数组的各个变量称为数组的分量,也称为数组的元素,有时也被称为下标变量。
- [x] B、在Swift中,数据值在被存储进入某个数组之前,数据地类型不需要明确。
- [ ] C、数组中元素的访问,是通过下标语法实现的。
- [ ] D、在Swift中,可以使用数组的append()方法,或者直接使用加号+,往已有的数组中添加新的元素.
字典
,描述正确的是:[多选题]- [x] A、字典是一个能够使用类似键的唯一标识符,来获取值得非序列化集合。
- [x] B、和数组不同的是,字典中的元素并没有具体的顺序。也就是说字典是无序存放元素的。
- [x] C、字典可以存储的键和值。必须提前定义它们的类型。
- [ ] D、字典可以存储的键和值。无须提前定义它们的类型。
函数
描述正确的语句是:[多选题]- [ ] A、Swift使用function进行函数的定义。
- [x] B、函数是一个组织在一起的程序代码金河。用来完成某个特定功能。
- [x] C、通过函数名以及对应类型的参数值。可调用这个函数。
- [ ] D、调用函数时传递的参数的顺序。无需与参数列表中的顺序相同
函数
的参数设置默认值:[判断题]- [ ] A、正确
- [x] B、错误
函数
,以下说法正确的是:[多选题]- [x] A、如果你不确定参数的数量,可通过变量类型后面添加...,定义可变参数。
- [ ] B、如果你不确定参数的数量,可通过变量类型后面添加___,定义可变参数。
- [x] C、一个函数最多能有一个可变参数,且必须是函数表中最后的一个。
- [ ] D、一个函数可以有多个可变参数,可变参数可以放在参数列表中的任意位置。
函数
作为另一个函数的返回值
:[判断题]- [x] A、正确
- [ ] B、错误
函数
作为另一个函数的参数
?:[判断题]- [x] A、正确
- [ ] B、错误
函数
无法同时返回多个值
:[判断题]- [ ] A、正确
- [x] B、错误
内置函数
,以下描述正确的是:[多选题]- [x] A、abs绝对值函数,用来返回指定参数的正值。当参数为负数时。返回对应的正数。当参数为正数时。结果将保存不变。
- [x] B、min最小值函数。用来返回不定数量的参数之间的最小值。
- [x] C、max最小值函数。用来返回不定数量的参数之间的最大值。
- [x] D、map函数通常用于将数组中的每一个元素,通过指定的方法进行转换。
枚举
类型,描述错误的是:[单选题]- [ ] A、所谓枚举是指将变量的值一一列举出来,并只限于在列举出来的值得范围内进行取值。
- [ ] B、Swift语言不须给枚举中的每一个成员都提供值。
- [x] C、字符、整数和浮点类型。可以作为枚举成员的数据类型。字符串则无法作为枚举成员的数据类型
- [ ] D、和Objective-C语言中的枚举不同,你可以为Swift的枚举添加方法。
结构体
类型,描述错误的是:[单选题]- [ ] A、可以为结构体定义常量或变量的属性
- [ ] B、和Objective-C语言中的结构体不同,你可以为Swift的结构体添加方法。
- [ ] C、可以给结构体定义下标。
- [x] D、使用structure关键字来进行定义的。
类
和结构体
,描述正确的是:[多选题]- [x] A、两者都可以定义属性以存储值。
- [x] B、两者都可以定义方法以提供功能。
- [x] C、两者都可以定义下标脚本,用于允许使用下标语法访问值。
- [x] D、两者都可以定义初始化器用于初始化状态。
类
和结构体
,描述正确的是:[多选题]- [x] A、两者都可以被扩展。以实现默认没有的功能。
- [x] B、两者都可以遵循协议,以针对特定类型提供标准功能。
- [ ] C、类可以继承另一个类,结构体也可以继承另一个结构体。
- [x] D、类和结构体都尅添加析构方法。
类
、结构体
和枚举
等类型定义静态方法
?:[判断题]- [x] A、正确
- [ ] B、错误
结构体
和枚举
定义静态方法
时,可以使用static
关键字:[判断题]- [x] A、正确
- [ ] B、错误
类
定义静态方法
时,可以使用class
关键字?:[判断题]- [x] A、正确
- [ ] B、错误
自动引用计数(ARC)技术
,来实现对实例的内存管理的:[判断题]- [x] A、正确
- [ ] B、错误
类
的继承
不同于结构体
和枚举
类型,继承
是类
所特有的?:[判断题]- [x] A、正确
- [ ] B、错误
延迟加载
属性是指当第一次被调用的时候,才会对其进行初始化操作的属性?:[判断题]- [x] A、正确
- [ ] B、错误
枚举
和结构体
属于引用类型
,而类
则属于值类型
:[判断题]- [ ] A、正确
- [x] B、错误
is
和as
操作符
来实现的?:[判断题]- [x] A、正确
- [ ] B、错误
AnyObject
,可以代表人和class类型的实例?:[判断题]- [x] A、正确
- [ ] B、错误
Any
可以表示人和类型,除了方法类型(function types)
?:[判断题]- [x] A、正确
- [ ] B、错误
扩展功能(Extension)
,可以在没有权限获取原始源代码的情况下,扩展某个类型的功能:[判断题]- [x] A、正确
- [ ] B、错误
类
、结构体
或枚举
类型的方法。都可以在扩展的帮助下进行添加?:[判断题]- [x] A、正确
- [ ] B、错误
扩展
加入,但重写的功能能不能使用扩展?:[判断题]- [x] A、正确
- [ ] B、错误
扩展
可以完成哪些任务?:[多选题]- [x] A、添加计算型属性和计算静态属性
- [x] B、定义实例方法和类型方法。
- [x] C、提供新的构造器。
- [x] D、使一个已有类型符合某个接口。
类
、结构体
和枚举
都可以遵循协议,并提供具体实现来完成协议
定义的方法和功能:[判断题]- [ ] A、正确
- [x] B、错误
Optional
类型,描述正确的是:[多选题]- [x] A、Optional类型是一个enum枚举类型,包含None和Some两个元素。
- [ ] B、Optional类型是一个enum枚举类型,包含Blank和Some两个元素。
- [x] C、在通过Some(T)包装wrap原始值之后,在使用Optional的时候。就要进行相应的拆包操作
- [ ] D、在通过Some(T)包装wrap原始值之后,在使用Optional的时候。无需进行相应的拆包操作
#define
、__OPTIMIZE__
宏定义方法?:[判断题]- [x] A、正确
- [ ] B、错误
subscript
下标脚本的语法:[多选题]- [x] A、类
- [ ] B、协议
- [x] C、结构体
- [x] D、枚举
- [x] A、下标脚本使用subscript关键字来定义
- [x] B、下标脚本使用 get、set来定义读、写属性,并不需要get和set都有,可以只读,并且读必须有。
- [x] C、定义 set 属性时。传入的参数默认名称为 newValue。并且newValue的类型和subscript函数返回值相同。
- [x] D、下标脚本允许你通过在实例后面的方括号中传入一个或多个的索引值对实例进行访问和赋值。
- [x] A、正确
- [ ] B、错误
- [x] A、可以
- [ ] B、不可以
- [x] A、动态类型
- [ ] B、动态名称
- [x] C、动态绑定
- [x] D、动态加载
autorelease
的?:[多选题]- [ ] A、init
- [x] B、alloc
- [x] C、new
- [x] D、copy
单一继承
,没有多重继承
:[判断题]- [x] A、正确
- [ ] B、错误
class
是继承自NSObject
,Swift会自动为所有非private的类和成员加上哪些标记?:[单选题]- [ ] A、@property
- [ ] B、@objec-no
- [x] C、@objc
- [ ] D、Synchronized
- [x] A、使用for循环
- [x] B、使用NSEnumerator遍历
- [x] C、使用for...in遍历
- [x] D、基于Block的遍历方式
Category
和原始类中的方法名称冲突,则Category
将覆盖原始类的方法。因为Category
具有更高的优先级?:[判断题]- [x] A、正确
- [ ] B、错误
Category
中添加实例变量
吗?:[判断题]- [x] A、正确
- [ ] B、错误
Category
可以实现哪些功能?:[多选题]- [x] A、将类的实现分散到多个不同文件或不同框架中。
- [x] B、创建对私有方法的前向引用。
- [ ] C、向对象添加正式协议。
- [x] D、向对象添加非正式协议。
- [x] A、NSDictionary 删除为 nil的key
- [x] B、NSDictionary添加nil的对象
- [x] C、.h文件里函数名,却忘了修改.m文件里对应的函数名
- [x] D、使用第三方库时,没有添加"-ObjC" flag
- [x] A、NSDictionary 删除为 nil的key
- [x] B、NSURL的初始化,传入nil的http地址
- [x] C、数组最大下标处理错误
- [x] D、如果一个数组刚初始化,还式空的,就对它进行相关操作
Mach异常信号说明。123.Mach异常通常指底层的内核级异常,以下哪些属于Mach异常?:[多选题]
SIGHUP1
SIGINT2
SIGQUIT3
SIGILL4
SIGATRAP5
SIGABRT6
SIGBUS7
SIGFPE8
SIGKILL9
SIGUSR110
SIGSEGV11
SIGSTOP12
- [x] A、EXC_BAD_ACCESS(Bad Memory Access)
- [x] B、EXC_BAD_INSTRUCTION 运行了非法的指令,往往是运行指令的参数不对(0或nil的参数)
- [x] C、EXC_RESOURCE 程序资源上线(cpu 占用过高或者内存不足)
- [x] D、EXC_GUARAD 一些C函数访问错误导致的异常
EXC_BAD_ACCESS
,一般是由于那两种情况造成的:[多选题]- [x] A、访问非法地址(SIGBUS信号)
- [ ] B、访问了尚未实现的方法
- [x] C、访问被回收掉的内存(SIGSEGV信号)
- [x] D、访问数组时出现了索引越界
抛出到最外层
还没有被捕获。程序会强行发送那个信号来中断程序
:[单选题]- [ ] A、SIGINT
- [x] B、SIGABRT
- [ ] C、SIGQUIT
- [ ] D、SIGSEGV
进程
终止不了,可尝试发送那个信号?:[单选题]- [ ] A、SIGINT
- [x] B、SIGABRT
- [ ] C、SIGKILL
- [ ] D、SIGSEGV
捕获
,阻塞
或忽略
的信号有哪两个:[多选题]- [ ] A、SIGTSTP
- [ ] B、SIGPWR
- [x] C、SIGKILL
- [x] D、SIGSTOP
进程退出的信号
有:[多选题]- [x] A、SIGALRM
- [x] B、SIGHUP
- [x] C、SIGKILL
- [x] D、SIGTERM
JSONENcoder
和 JSONDecoder
,使对象和JSON之间进行转换:[单选题]- [ ] A、Swift1.0
- [ ] B、Swift2.0
- [ ] C、Swift3.0
- [x] D、Swift4.0
初始化方法
、也可添加函数
[判断题]- [x] A、正确
- [ ] B、错误
结构体
可以添加函数
、扩展
,和实现protocol
吗[判断题]- [x] A、可以
- [ ] B、不可以
字符串、数组和字典
是以结构体
的形式实现的,还是以类
的形式实现的?[判断题]- [ ] A、类
- [x] B、结构体
结构体
,传递时会进行拷贝。而不会改变原有的值吗?[判断题]- [x] A、是的
- [ ] B、不是
字符串的长度
[单选题]- [ ] A、"xxx".length
- [x] B、"xxx".count
- [ ] C、"xxx".charcters.count
- [ ] D、"xxx".charcters.length
单向区间
主要分两种:确定上限和确定下限的区间。如6...,表示6及之和的所有控件。请问单项区间是由那个Swift版本带来的[单选题]- [ ] A、Swift1.0
- [ ] B、Swift2.0
- [ ] C、Swift3.0
- [x] D、Swift4.0
runtime Associate
方法关联的对象,需要在主对象dealloc
的时候释放么?[判断题]- [ ] A、需要
- [x] B、不需要
编译后
得到的类中增加实例变量?[判断题]- [ ] A、可以
- [x] B、不可以
运行时
创建的类中添加实例变量?[判断题]- [x] A、可以
- [ ] B、不可以
Carsh
场景[多选题]- [x] A、访问了僵尸对象
- [x] B、访问野指针
- [x] C、数组越界
- [x] D、访问了不存在的方法
闭包
是值类型
还是引用类型
的?[判断题]- [ ] A、值类型
- [x] B、引用类型
weak
属性需要在dealloc
中置为nil吗?[判断题]- [ ] A、需要
- [x] B、不需要
nil
对象发送消息会导致crash
吗?[判断题]- [ ] A、会
- [x] B、不会
存储区说明。143.
栈13
堆14
全局区15
文字常量区16
程序代码区17
runtime
会将weak
对象放入哪种数据结构
?[单选题]- [ ] A、栈
- [ ] B、队列
- [ ] C、堆
- [x] D、hash表
autoreleasepool
是以一个队列数组
的形式实现的,主要通过以下三个函数完成:[多选题]- [x] A、objc_autoreleasepoolPush
- [x] B、objc_autoreleasepoolPop
- [ ] C、objc_autoreleasepoolMov
- [x] D、objc_autorelease
load
和initlize
方法只会被调用一次
吗?[判断题]- [x] A、是
- [ ] B、不是
类
的静态方法
,需要release
吗?[判断题]- [x] A、需要
- 【①(语法篇)、《史上最全iOS八股文面试题》2022年|①(语法篇)、《史上最全iOS八股文面试题》2022年,金三银四我为你准备了,iOS《1000条》笔试题以及面试题(包含答案)】[ ] B、不需要
147.以下哪些是RunLoop可以做到的:[多选题]
- [x] A、使程序一直运行接受用户输入
- [x] B、决定程序在何时应该处理哪些Event
- [x] C、调用解耦
- [x] D、节省CPU时间
注脚
- SIGHUP:用户终端退出进程时,终端将接收到SIGHUP信号。这个信号的默认操作为终止进程。 ?
- SIGINT:程序终止信号(interrupt),在用户键入INTR字符(通常Ctrl-C)时发出,用于通知前台进程组终止进程。 ?
- SIGQUIT:和SIGINT类似,但进程收到SIGQUIT会产生core文件,这个意义上类似于一个进程错误信号。 ?
- SIGILL:执行了非法指令,通常因为可执行文件本身出席错误,或者试图执行数据段,堆栈溢出时也有可能产生这个信号。 ?
- SIGATRAP:由断点指令或其他trap指令产生,由debugger使用。 ?
- SIGABRT:调用abort函数生成的信号。 ?
- SIGBUS:非法地址,包括内存地址对齐出错。比如访问一个四个字长的整数,但其地址不是4的倍数。 ?
- SIGFPE:在发生致命的算术运算错误时发出,不仅包括浮点运算错误,还包括溢出及除数为0等其他所有的算术错误。 ?
- SIGKILL:用来立即结束程序的运行,本信号不能被阻塞、处理和忽略。如果管理员发现某个进程终止不了,可以尝试发送这个信号。 ?
- SIGUSR1、SIGUSR2:留给用户使用。 ?
- SIGSEGV:试图访问未分配给自己的内存,或试图往没有权限的内存地址写数据。 ?
- SIGSTOP:停止(stopped)进程的执行,但该信号可以被处理和忽略,用户键入SUSP字符时(通常Ctrl-Z)发出这个信号。 ?
- 栈:编译器自动分配和释放,存放函数参数值,局部变量,(swift结构体,栈block)等。 ?
- 堆:程序员画管理释放。分配方式倒是类似于链表。就是通过new、malloc、realloc分配的内存块,编译器不会负责它们的释放工作,需要用程序区释放。分配方式类似于数据结构中的链表。在iOS开发中所说的“泄漏”说的就是堆区的内存。 ?
- 全局区:全局变量和静态变量 。初始化过的全局变量和静态变量在同一块区域,未初始化的全局变量和静态变量存放在一块相邻的区域内。此区域由系统在程序结束后释放。 ?
- 文字常量区:常量字符串,程序结束后由系统释放 ?
- 程序代码区:存放函数二进制代码。在程序结束后由系统释放。 ?
推荐阅读
- JavaScript|JavaScript 数据处理 - 映射表篇
- Android|Android之Handler源码分析(第六篇(其他特性))
- java|java 不写this_还没弄明白Java中的this关键字吗,那来看这篇就够了!
- 通过对比语法差异,让会JAVA的你快速学会Kotlin的开源宝藏项目
- 一篇文章教你写好自己的简历
- VT|VT 入门篇——最小 VT 实现(上)
- 护网|护网总结篇
- Linux|【Linux篇】第四篇——Linux环境下的工具(二)(make/Makefile+进度条小程序)
- 嵌入式面试问题系列|常见嵌入式面试题之Linux操作系统篇 ——第2期
- Protocol|【PCIe页请求服务】到底到底到底是啥(半年搜遍全网找不到一篇介绍文章,没人写那我来写吧)