iOS基础面试题2

前言:欢迎大家评论,给出正确地答案

1.   Object-c的类可以多重继承么?可以实现多个接口么?Category是什么?重写一个类的方式用继承好还是分类好?为什么?

Object-c的类不可以多重继承;可以实现多个接口,通过实现多个接口可以完成C++的多重继承;Category是类别,一般情况用分类好,用Category去重写类的方法,仅对本Category有效,不会影响到其他类与原有类的关系。

2.#import 跟#include 又什么区别,@class呢, #import<> 跟 #import”"又什么区别?

#import是Objective-C导入头文件的关键字,#include是C/C++导入头文件的关键字,使用#import头文件会自动只导入一次,不会重复导入,相当于#include和#pragma once;@class告诉编译器某个类的声明,当执行时,才去查看类的实现文件,可以解决头文件的相互包含;#import<>用来包含系统的头文件,#import””用来包含用户头文件。

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

readwrite 是可读可写特性;需要生成getter方法和setter方法时

readonly 是只读特性  只会生成getter方法 不会生成setter方法 ;不希望属性在类外改变

assign 是赋值特性,setter方法将传入参数赋值给实例变量;仅设置变量时;

retain 表示持有特性,setter方法将传入参数先保留,再赋值,传入参数的retaincount会+1;

copy 表示拷贝特性,setter方法将传入对象复制一份;需要完全一份新的变量时。

nonatomic 非原子操作,决定编译器生成的setter getter是否是原子操作,atomic表示多线程安全,一般使用nonatomic

4.写一个setter方法用于完成@property (nonatomic,retain)NSString *name,写一个setter方法用于完成@property(nonatomic,copy)NSString *name

[cpp] view plaincopy

  1. - (void) setName:(NSString*) str
  2. {
  3. [str retain];
  4. [name release];
  5. name = str;
  6. }
  7. - (void)setName:(NSString *)str
  8. {
  9. id t = [str copy];
  10. [name release];
  11. name = t;
  12. }

5.对于语句NSString*obj = [[NSData alloc] init]; obj在编译时和运行时分别时什么类型的对象?

编译时是NSString的类型;运行时是NSData类型的对象

6.常见的object-c的数据类型有那些, 和C的基本数据类型有什么区别?如:NSInteger和int

object-c的数据类型有NSString,NSNumber,NSArray,NSMutableArray,NSData等等,这些都是class,创建后便是对象,而C语言的基本数据类型int,只是一定字节的内存空间,用于存放数值;NSInteger是基本数据类型,并不是NSNumber的子类,当然也不是NSObject的子类。NSInteger是基本数据类型Int或者Long的别名(NSInteger的定义typedef long NSInteger),它的区别在于,NSInteger会根据系统是32位还是64位来决定是本身是int还是Long。

7.id 声明的对象有什么特性?

Id 声明的对象具有运行时的特性,即可以指向任意类型的objcetive-c的对象;

8.Objective-C如何对内存管理的,说说你的看法和解决方法?

Objective-C的内存管理主要有三种方式ARC(自动内存计数)、手动内存计数、内存池。

9.内存管理的几条原则时什么?按照默认法则.那些关键字生成的对象

需要手动释放?在和property结合的时候怎样有效的避免内存泄露?

谁申请,谁释放

遵循Cocoa Touch的使用原则;

内存管理主要要避免“过早释放”和“内存泄漏”,对于“过早释放”需要注意@property设置特性时,一定要用对特性关键字,对于“内存泄漏”,一定要申请了要负责释放,要细心。

关键字alloc 或new 生成的对象需要手动释放;

设置正确的property属性,对于retain需要在合适的地方释放,

10.如何对iOS设备进行性能测试?

Profile-> Instruments ->Time Profiler

11.看下面的程序,第一个NSLog会输出什么?这时str的retainCount是多少?第二个和第三个呢? 为什么?

[cpp] view plaincopy

  1. =======================================================
  2. NSMutableArray* ary = [[NSMutableArray array] retain];
  3. NSString *str = [NSString stringWithFormat:@"test"];
  4. [strretain];
  5. [aryaddObject:str];
  6. NSLog(@"%@%d",str,[str retainCount]);
  7. [strretain];
  8. [strrelease];
  9. [strrelease];
  10. NSLog(@"%@%d",str,[str retainCount]);
  11. [aryremoveAllObjects];
  12. NSLog(@"%@%d",str,[str retainCount]);
  13. =======================================================

str的retainCount创建+1,retain+1,加入数组自动+1

3

retain+1,release-1,release-1

2

数组删除所有对象,所有数组内的对象自动-1

1

12. Object C中创建线程的方法是什么?如果在主线程中执行代码,方法是什么?如果想延时执行代码、方法又是什么?

线程创建有三种方法:使用NSThread创建、使用GCD的dispatch、使用子类化的NSOperation,然后将其加入NSOperationQueue;在主线程执行代码,方法是performSelectorOnMainThread,如果想延时执行代码可以用performSelector:onThread:withObject:waitUntilDone:

13.描述一下iOS SDK中如何实现MVC的开发模式

MVC是模型、试图、控制开发模式,对于iOS SDK,所有的View都是视图层的,它应该独立于模型层,由视图控制层来控制。所有的用户数据都是模型层,它应该独立于视图。所有的ViewController都是控制层,由它负责控制视图,访问模型数据。

时间: 2024-07-30 03:29:46

iOS基础面试题2的相关文章

2015 IOS iOS基础面试题(一)——在蓝懿教育

iOS如何面试 iOS基础面试题(二) iOS基础面试题(三) iOS基础面试题(四) iOS进阶面试题----Block部分 iOS进阶面试题----多线程部分 iOS进阶面试题----经典10道 iOS面试悲剧的应对方法 随着iOS平台开发的职位的增加,笔试.面试也越来越有“套路”,这里我总结了一些面试题,多数是Objective-C的基础知识,适合于面试新人,答案是我自己答的,不准确的地方,欢迎指出. 1.   Object-c的类可以多重继承么?可以实现多个接口么?Category是什么

iOS基础面试题3

iOS进阶面试题----多线程部分 前言:欢迎大家评论,给出正确地答案 1.Difference between shallow copy and deep copy?浅复制和深复制的区别?答案:浅层复制:只复制指向对象的指针,而不复制引用对象本身.深层复制:复制引用对象本身.意思就是说我有个A对象,复制一份后得到A_copy对象后,对于浅复制来说,A和A_copy指向的是同一个内存资源,复制的只不过是是一个指针,对象本身资源还是只有一份,那如果我们对A_copy执行了修改操作,那么发现A引用的

IOS基础面试题

最近离职了,找工作,光会做项目,对基础不熟,今天就总结了一点面试题. 废话不多说,上题吧: 1.objective-c中的数字对象都有哪些,简述它们与基本数据类型的区别是什么. 基本类型和C一样,主要是有int.long.double.float.char.void.bool.对于基本数据类型,不需要使用指针,NSNumber是OC的数字对象,需要考虑内存释放问题.数字类型有:NSInteger.CGFloat.数据对象有NSNumber.对象和变量的差别.可以拆装效果.其他的类型有NSStri

iOS基础笔试题-(2)

12. obj在编译时和运行时分别时什么类型的对象 如下面的代码,obj在编译时和运行时分别时什么类型的对象: 1 2 3 NSString *obj = [[NSData alloc] init]; 参考答案: 在编译时,我们所声明的obj是NSString *类型,因此是NSString类型对象.在运行时,由于指针obj所指向的是NSData类型对象的内存,因此实际上是NSData类型的对象.在编译时,这一行代码会转换成类似这样: 1 2 3 4 NSString *obj = ((id (

iOS基础面试题一

一.简答题 1.下面这些方法的方法名是什么? -(void)person -(void)personWithAge; -(void)personWithAge:(int)age; -(void)personWithAge:(int)age name:(NSString *)name; 答:person /   personWithAge  / personWithAge:   /   personWithAge: name: 2.NSArray和NSSet有什么使用区别? (1)NSArray是

ios基础笔试题-集锦二

前言 下文转载自:http://www.henishuo.com/objc-interview-two/ 1.即时聊天App不会采用的网络传输方式 A. UDP B. TCP C. HTTP D. FTP FTP:是文件传输协议,是File Transfer Protocol的简称,它的作用是用于控制互联网上文件的双向传输,因此一定不会是即时聊天使用的: UDP:是面向无连接的传输层协议,数据传输是不可靠的,它只管发,不管收不收得到: TCP:是面向连接的,可靠的传输层协议: HTTP:是超文本

iOS基础笔试题集锦

1. #import和#include的区别? #import是指Objective-C导入头文件的语法,可以避免重复导入 #include是指C / C++导入头文件的写法,如果是Objective-C 与 C / C++实行混编,那么还是需要用#include进行导入, 这种写法,需要添加防重复引用的语法 [email protected]的作用 @class是 告诉编译器的某个类的申明,但是在.m文件中还是需要#import进来,它的作用只是前向申明

iOS进阶面试题----多线程

本文转载至 http://blog.csdn.net/xunyn/article/details/14525243 ios面试题多核并发应用 iOS面试题系列: iOS如何面试 iOS面试题(一) iOS基础面试题(二) iOS基础面试题(三) iOS基础面试题(四) iOS进阶面试题----Block部分 1 多线程是什么 多线程是个复杂的概念,按字面意思是同步完成多项任务,提高了资源的使用效率,从硬件.操作系统.应用软件不同的角度去看,多线程被赋予不同的内涵,对于硬件,现在市面上多数的CPU

iOS一些基础面试题

Part One 别人问你你都感觉这尼玛说啥的基础面试题 1.UIWindow和UIView和 CALayer 的联系和区别? 答:UIView是视图的基类,UIViewController是视图控制器的基类,UIResponder是表示一个可以在屏幕上响应触摸事件的对象: UIwindow是UIView的子类,UIWindow的主要作用:一是提供一个区域来显示UIView,二是将事件(event)的分发给UIView,一个应用基本上只有一个UIWindow. 万物归根,UIView和CALay