iOS 面试题集-06

1、简述ARC:

ARC是编译器特性,iOS 5新增添加的特性,使用ARC,开发者不需要retain、release、autorlease,因为编译器会在适当的地方插入retain、release。缺点:ARC不会因少release而导致内存泄漏,过渡release导致程序崩溃ARC可以产生更简洁的代码和更健壮的应用。

2、线程和进程的区别:

1>、一个应用程序对应一个进程,一个进程帮助程序占据一块存储空间。
2>、要想在进程中执行任务,就必须开启线程,一个线程就代表一个任务。
3>、一个进程中允许开启多条线程,也就是同时执行多个任务。

3、堆和栈的区别:

1>、堆空间内存是动态分配的,一般存放对象,并且需要手动释放内存。
2>、栈空间的内存由系统自动分配,一般存放局部变量等,不需要手动管理内存。

4、对象是什么时候被释放的:

1>每个对象都有一个引用计数器,每个新对象的引用计数器是1,当对象的计数器减为0时,就会被销毁。

5、self.根->什么区别:

1>、self.是调用get或set方法;
2>、self是当前本身,是一个指向当前对象的指针;
3>、self->是直接访问成员变量;

6、属性readwrite、readonly、assign、retain、copy、nonatomic 各是什么作用,在那种情况下用?

1>、readwrite:同时生成get方法和set方法的声明和实现。
2>、readonly:只生成get方法的声明和实现。
3>、assign:set方法的实现是直接赋值,用于基本数据类型;
4>、retain:set方法的实现release旧值,retain新值,用于OC对象数据类型。
5>、copy:set方法的实现是release旧值,copy新值,用于NSString、block等类型。
6>、nonatomic:非原子性,set方法的实现不枷锁(比atomic性能高);

7、对于语句NSString *obj = [NSData alloc] init]; 编译时和运行时obj分别是什么类型?

1>、编译时是NSString类型、运行时NSData类型。

8、常见的object-c的数据类型有那些,和c的基本数据类型有什么区别?

1>、常见的object-c的数据类型:NSString、NSArray、NSDictionary、NSData、NSNumber等。
2>、OC对象需要手动管理内存,C的基本数据类型不需要管理内存。

9、简述object-c是如何对内存管理:

1>、每个对象都有一个引用计数器,每个新对象的计数器是1,当对象的计数器减为0时,就会被销毁。
2>、通过retain可以让对象的计数器+1,release可以让计数器减1。
3>、还可以通过auto release pool 管理内存。
4>、如果使用ARC,编译器会自动生成管理内存的代码。

10、内存管理的几条原则是什么?按照默认法制哪些方法生成的对象需要手动释放?在和property结合时侯怎样有效的避免内存泄漏?

1>、只要调用了alloc、copy、new方法产生了一个新对象,都必须在最后调用一次release或者auto release。
2>、只要调用了retain,都必须在最后调用一次release或者auto release。
3>、@property 如果用了copy或retain,就需要对不再使用的属性做一次release操作。
4>、如果使用ARC,另外做讨论。

转载于:https://www.jianshu.com/p/6b1af12c94cb

猜你喜欢

转载自blog.csdn.net/weixin_33895657/article/details/91053056