iOS面试题一

1. 简述OC中内存管理机制。与retain配对使用的方法是dealloc还是release,为什么?需要与alloc配对使用的方法是dealloc还是release,为什么?readwrite,readonly,assign,retain,copy,nonatomic 、atomic、strong、weak属性的作用?

引用计数机制进行内存管理。

retain对应的是release,内存的释放用release。

alloc对应的是dealloc,内存的销毁用dealloc。

readwrite此标记说明属性会被当成读写的,这也是默认属性。

readonly此标记说明属性只可以读,也就是不能设置,可以获取。

assign不会使引用计数加1,也就是直接赋值。

retain会使引用计数加1。

copy建立一个索引计数为1的对象,在赋值时使用传入值的一份拷贝。

nonatomic:非原子性访问,多线程并发访问会提高性能。

atomic:原子性访问。

strong:打开ARC时才会使用,相当于retain。

copy : 适用于接受了nscopy协议的对象类型

assign : 适用于一般类型

retain : 适用于一般对象类型

2.类变量的@protected ,@private,@public,@package,声明各有什么含义?

@protected 该类和所有子类中的方法可以直接访问这样的变量。

@private 该类中的方法可以访问,子类不可以访问。

@public   可以被所有的类访问

@package 本包内使用,跨包不可以

3.线程是什么?进程是什么?二者有什么区别和联系?

线程,有时称为轻量级进程,是被系统独立调度和CPU的基本运行单位。

进程是操作系统中可以并行工作的基本单位。

一个应用程序里至少有一个进程,一个进程里至少有一个线程

4.谈谈你对多线程开发的理解?ios中有几种实现多线程的方法

在一个进程中有多个线程,每个线程有自己单独的任务 优点效率快缺点不安全,耗费资源

有三种: 第一种,使用@synchronized(self)  第二种,使用GCD  第三种,使用NSOperationQueue

5.线程同步和异步的区别?IOS中如何实现多线程的同步?

一个进程启动的多个不相干线程,它们相互之间关系为异步。

同步的话指的是多线程同时操作一个数据这个时候需要对数据添加保护这个保护就是线程的同步。

用GCD中的串行队列来解释多线程的同步,也就是队列中的任务为串行,它们各自对相邻的任务有依赖性,如果任务1不完成,那么任务2就不会开始,这就是同步

6.假设有一个字符串aabcad,请写一段程序,去掉字符串中不相邻的重复字符串,即上述字符串处理之后的输出结果为:aabcd

NSMutableString *str = [[NSMutableString alloc]initWithFormat:@"aabcad"];
for (int i = 0; i < str.length - 1; i++) {
    unsigned char a = [str characterAtIndex:i];
    for (int j = i + 1; j < str.length; j++) {
        unsigned char b = [str characterAtIndex:j];
        if (a == b) {
            if (j == i + 1) {
                        
            }else{
                        
                [str deleteCharactersInRange:NSMakeRange(j, 1)];
            }
        }
    }
}
      
NSLog(@"%@", str);

7.获取一台设备唯一标示的方法有哪些?

1.UDID

2.UUID

3.MAC ADDRESS

4.OPEN UDID

5.广告标识符

6.Vindor标示符

ios7之后用的时keychain(钥匙串)

8.ios类是否可以多继承?如果没有,那可以用其他方法实现吗?简述实现过程。

没有    用catogory、extension来实现

Category也叫分类或类,主要作是为 没有源代码的类添加法 。通过Category添加的法会成为原类的部分。从达到扩展个类的功能。

Extension (延展)的主要作是管理类的“私有”法

9.堆和栈的区别?

堆需要用户手动释放内存,而栈则是编译器自动释放内存

堆栈的区别:

(1)管理方式:对于栈来讲,是由编译器自动管理,无需我们手工控制;对于堆来说,释放工作由程序员控制,容易产生 memory leak。

(2)申请大小:能从栈获得的空间较小,堆是向高地址扩展的数据结构,是不连续的内存区域。堆的大小受限于计算机系统中 有效的虚拟内存。由此可见,堆获得的空间比较灵活,也比较大。

(3)碎片问题:对于堆来讲,频繁的new/delete势必会造成内存空间的不连续,从而造成大量的碎片,使程序效率降低。 对于栈来讲,则不会存在这个问题,因为栈是先进后出的队列,他们是如此的一一对应,以至于永远都不可能有一个内存块 从栈中间弹出

(4)分配方式:堆都是动态分配的,没有静态分配的堆。栈有2种分配方式:静态分配和动态分配。静态分配是编译器完成 的,比如局部变量的分配。动态分配由 alloca函数进行分配,但是栈的动态分配和堆是不同的,他的动态分配是由编译器 进行释放,无需我们手工实现。

(5)分配效率:栈是机器系统提供的数据结构,计算机会在底层对栈提供支持:分配专门的寄存器存放栈的地址,压栈出栈 都有专门的指令执行,这就决定了栈的效率比较高。堆则是C/C++函数库提供的,它的机制是很复杂的。

10.ios本地数据存储都有哪几种方式?    1.  NSKeyedArchiver(归解档)    2.  NSUserDefaults    3.  Write写入方式    4.  SQLite3    5.coredata

11. iOS动态类型和动态绑定、动态载入   

 IOS的动态类型(强类型)id 可以在代码运行时判断对象的类型。使用id类型(又称强类型)可以在运行的时候使用任何数据类型来替换。动态类型让程序更加灵活,但会使数据的统一性降低。我们常用的静态类型如NSString等是有着自己的优势的,使用静态类型编译器可以完全分析代码的性能,可预知性更高。 IOS动态绑定 可以在代码运行的时候判断需要调用什么方法。动态类型和动态绑定使得选择那个接收者以及调用哪个方法都可以在运行时决定。 动态载入 应用可以根据需要加载可执行代码以及资源,而不是在启动时就加载所有资源。    
时间: 2024-11-09 13:48:43

iOS面试题一的相关文章

最全的iOS面试题及答案-转载

1. Object-c的类可以多重继承么?可以实现多个接口么?Category是什么?重写一个类的方式用继承好还是分类好?为什么? 答: Object-c的类不可以多重继承:可以实现多个接口,通过实现多个接口可以完成C++的多重继承:Category是类别,一般情况用分类好,用Category去重写类的方法,仅对本Category有效,不会影响到其他类与原有类的关系. 2. #import 跟#include 又什么区别,@class呢, #import<> 跟 #import””又什么区别?

iOS面试题之加载单张图片到底会不会崩溃?

今天,一哥们去某公司面试iOS职位.其中一道题目问,加载一张图片,到底会不会崩溃呢? 我拿到这个问题,当时以为是获取网络图片,那还是可能崩溃的,但实际问题,还有半句,图片是本地的... 这问题,加载本地的怎么会崩溃呢?写这么久加载图片也没遇到如此问题. =================================================== 原来,iPhone毕竟是手持设备,它所占有的内存是有限的,当图片过大的时候会引起内存导致的崩溃现象. 后来,我又查了下,发现,原来还有这么大学

iOS面试题 第一天

今天上午,下午分别面试了两家公司.上午是一家互联网公司,气氛还比较好,是我比较喜欢的.技术这块是直接机试,主要是给了些BUG让我修复,整个过程还算顺利.下午去了一家大型的证券公司.整理技术问题如下: 1. UIView的生命周期是什么样的,执行顺序是怎么样的?init -- loadView -- viewDidLoad -- viewWillAppear -- viewWillDisappear -- viewDidUnload -- dealloc. 2. UIViewController在

iOS 面试题 总结

#include <iostream> using namespace std; int main () { char p[]={'a','b','c'}, q[]="abc"; printf("%d %d\n",sizeof(p),sizeof(q)); //getch(); } //结果 3,4 sizeof有什么作用呢? sizeof是C语言的关键字不并不是函数,这个很容易被忽略 sizeof(a)表示a在内存中所占的字节数 以下是windows

iOS 面试题:OC基本概念题

1.什么是类和对象? 类是一组具有同样特征和功能的事物的抽象 对象描写叙述了一个物体的特征和行为实现 类是对象的抽象 对象是类的实例 2.OC中定义类,创建对象,使用对象. OC中定义类分为接口部分,实现部分 接口部分:对外声明类的特征和行为 实现部分:实现方法,即类的行为实现 创建对象须要进行分配内存空间和初始 3.声明方法,依据需求.区分:方法声明,方法实现,方法运行 4.继承.继承的全部特点 子类能够继承父类全部的声明的方法和除私有的以外实例变量 父类不能使用子类所创建的方法和实例变量 5

一些iOS面试题及简要回答

1. #import 跟#include.@class有什么区别?#import<> 跟 #import""又什么区别? 1> #import和#include都能完整地包含某个文件的内容,#import能防止同一个文件被包含多次 2> @class仅仅是声明一个类名,并不会包含类的完整声明;@class还能解决循环包含的问题 3> #import <> 用来包含系统自带的文件,#import ""用来包含自定义的文件 2.

原 iOS面试题收集

原 iOS面试题收集 发表于2年前(2013-07-22 13:47)   阅读(369) | 评论(0) 4人收藏此文章, 我要收藏 赞0 听云性能监测产品App.Server.CDN免费试用,绑定账号送京东卡 iOS 面试题 Objective-C 1.ARC 是什么? ARC 是 iOS 5 推出的新功能,全称叫 ARC(Automatic Reference Counting).简单 地说,就是代码中自动加入了 retain/release,原先需要手动添加的用来处理内存管 理的引用计数

[转载]iOS面试题总

转载自:http://blog.sina.com.cn/s/blog_67eb608b0101r6xb.html (2014-06-13 20:23:33) 转载▼ 标签: 转载   crash 原文地址:iOS面试题总作者:唯一的弟子 1.简述OC中内存管理机制.与retain配对使用的方法是dealloc还是release,为什么?需要与alloc配对使用的方法是dealloc还是release,为什么?readwrite,readonly,assign,retain,copy,nonato

iOS面试题系列之Objective-C相关

1.简述你项目中常用的设计模式.它们有什么优缺点? 常用的设计模式有:代理.观察者.单例. (1)单例:它是用来限制一个类只能创建一个对象.这个对象中的属性可以存储全局共享的数据.所有的类都能访问.设置此单例中的属性数据. 优点:是它只会创建一个对象容易供外界访问,节约性能. 缺点:是一个类只有一个对象,可能造成责任过重,在一定程度上违背了"单一职责原则".单例模式中没有抽象层,所以单例类的扩展有很大的困难.不能过多创建单例,因为单例从创建到程序关闭前会一直存在,过多的单例会影响性能,

超全!iOS 面试题汇总

超全!iOS 面试题汇总 2015-10-20 CocoaChina 作者:Job_Yang 之前看了很多面试题,感觉要不是不够就是过于冗余,于是我将网上的一些面试题进行了删减和重排,现在分享给大家.(题目来源于网络,侵删) 1. Object-c的类可以多重继承么?可以实现多个接口么?Category是什么?重写一个类的方式用继承好还是分类好?为什么? 答: Object-c的类不可以多重继承;可以实现多个接口,通过实现多个接口可以完成C++的多重继承;Category是类别,一般情况用分类好