iOS 面试题

2016-04-01  本文已影响303人  afd0a1817353
1.#import和#include的区别 @class?
2. readwrite,readonly,assign,retain,copy,nonatomic 属性的作用
3.在一个对象的方法里面:self.name= “object”;和 name =”object” 有什么不同吗?
4.请简述self.name= nil的机制,以及与[namerelease]的区别?
5.请简要说明viewDidLoad和viewDidUnload何时调用
6.实例化一个UITableView对象,要求写出关键语句?
UITableView *my = [[UITableView alloc]initWithFrame:<(CGRect)frame> style:<(UITableViewStyle)style>];
my.delegate = self;
my.dataSource = self;
7.使用sql语句查询出省名以湖开头,邮编为436001所在的市区?(表名及字段名自定义)

select*fromcitys where postcode=436001 and province=’湖%’;

8.打印结果
main()
{
    int a[5]={1,2,3,4,5};
    int *ptr=(int *)(&a+1);
    printf(“%d,%d”,*(a+1),*(ptr-1));
}
void Func ( char str[100] )
{
    sizeof(str ) = ?
}
void *p = malloc( 100 );
sizeof( p ) = ?

9.用预处理指令#define声明一个常数,用以表明1年中有多少秒(忽略闰年问题)
10.写一” 标准”宏MIN ,这个宏输入两个参数并返回较小的一个
11.数组和指针的区别
12.static的作用
13.简述内存分区情况
14.#include<filename>和#include”filename”有什么区别
15.const char * p; char const * p; char * const p; const char * const p;
16.MVC的理解?
17.在Obj-c中有没有私有方法?私有变量?一般采用什么方法实现?
@interfaceController : NSObject { NSString *something; }
+(void)thisIsAStaticMethod;
-(void)thisIsAnInstanceMethod;
@end
@interfaceController (private)
-(void)thisIsAPrivateMethod;
@end
18.OC中加号方法与减号的区别?
19.free与release的区别
20.在终端环境下,分别说明4,2,1,0对应的权限是什么
21.ARC机制

ARC就是automatic reference counting ,简单说就是就是代码中自动加入了retain/release,原先需要手动添加的用来处理内存管理的引用计数的代码可以自动地由编译器完成了。

22.自动释放池是什么,如何工作
23.浅复制和深复制的区别?//浅拷贝和深拷贝
25.frame和bounds有什么不同?
26. obj-c的优缺点
27.用变量a给出下面的定义
a)一个整型数(An integer)
b)一个指向整型数的指针( A pointer to aninteger)
c)一个指向指针的的指针,它指向的指针是指向一个整型数( Apointer to a pointer to an intege)r
d)一个有10个整型数的数组( An array of 10 integers)
e) 一个有10个指针的数组,该指针是指向一个整型数的。(An array of 10 pointers to integers)
f) 一个指向有10个整型数数组的指针( A pointer to an array of 10 integers)
g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数(Apointer to a function that takes an integer as an argument
 andreturns an integer)
h)一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数( An array of ten pointers to functions t
hat takean integer argument and return an integer )
a) int a; // Aninteger
b) int *a; // A pointer to aninteger
c) int **a; // A pointer to apointer to an integer
d) int a[10]; // An array of10 integers
e) int *a[10]; // An array of10 pointers to integers
f) int (*a)[10]; // A pointerto an array of 10 integers
g) int (*a)(int); // A pointerto a function a that takes an integer argument and returns aninteger
h) int (*a[10])(int); // Anarray of 10 pointers to functions that take an integer argument andreturn an integer
28.写出几个死循环?
29.队列和栈有什么区别:
30.HTTP协议中,POST和GET的区别是什么?
31. iOS的系统架构分为
32. 控件主要响应3种事件:
33.xib文件的构成分为哪3个图标?都具有什么功能。
34. 简述视图控件器的生命周期。
35. 动画有基本类型有哪几种;表视图有哪几种基本样式?
36. 实现简单的表格显示需要设置UITableView的什么属性、实现什么协议?
37. Cocoa Touch提供了哪几种Core Animation过渡类型(10分)?
38. UIView与CLayer有什么区别?
  1. UIView 是 iOS 系统中界面元素的基础,所有的界面元素都是继承自它。它本身完全是由 CoreAnimation 来实现的。它真正的绘图部分,是由一个 CALayer 类来管理。 UIView 本身更像是一个 CALayer 的管理器,访问它的跟绘图和跟坐标有关的属性。
  2. UIView 有个重要属性 layer ,可以返回它的主 CALayer 实例。
  3. UIView 的 CALayer 类似 UIView 的子 View 树形结构,也可以向它的 layer 上添加子layer ,来完成某些特殊的表示。即 CALayer 层是可以嵌套的。
  4. UIView 的 layer 树形在系统内部,被维护着三份 copy 。分别是逻辑树,这里是代码可以操纵的;动画树,是一个中间层,系统就在这一层上更改属性,进行各种渲染操作;显示树,其内容就是当前正被显示在屏幕上得内容。
  5. 动画的运作:对 UIView 的 subLayer (非主 Layer )属性进行更改,系统将自动进行动画生成,动画持续时间的缺省值似乎是 0.5 秒。
  6. 坐标系统: CALayer 的坐标系统比 UIView 多了一个 anchorPoint 属性,使用CGPoint 结构表示,值域是 0~1 ,是个比例值。这个点是各种图形变换的坐标原点,同时会更改 layer 的 position 的位置,它的缺省值是 {0.5,0.5} ,即在 layer 的中央。
  7. 渲染:当更新层,改变不能立即显示在屏幕上。当所有的层都准备好时,可以调用setNeedsDisplay 方法来重绘显示。
  8. 变换:要在一个层中添加一个 3D 或仿射变换,可以分别设置层的 transform 或affineTransform 属性。
  9. 变形: Quartz Core 的渲染能力,使二维图像可以被自由操纵,就好像是三维的。图像可以在一个三维坐标系中以任意角度被旋转,缩放和倾斜。 CATransform3D 的一套方法提供了一些魔术般的变换效果。
39.链表翻转。
40. 链表逆序(C语言)。

链表逆序就是把一个链表按照原来的链接顺序逆序实现(也就是将头变成尾,尾变成头)。
编程思路:其实最关键的是先通过原来的链接顺序找到下个节点,然后再把前个节点反序。

41. Quatrz 2D的绘图功能的三个核心概念是什么并简述其作用(10分)。
42. iPhone OS主要提供了几种播放音频的方法(10分)?
43. 使用AVAudioPlayer类调用哪个框架、使用步骤(10分)?
44. 有哪几种手势通知方法、写清楚方法名?
-(void)touchesBegan:(NSSet*)touchedwithEvent:(UIEvent*)event;
-(void)touchesMoved:(NSSet*)touched withEvent:(UIEvent*)event;
-(void)touchesEnded:(NSSet*)touchedwithEvent:(UIEvent*)event;
-(void)touchesCanceled:(NSSet*)touchedwithEvent:(UIEvent*)event;
45. 实例化一个UITableView对象,要求写出关键语句。
UITableView *my = [[UITableView alloc]initWithFrame:<(CGRect)frame> style:<(UITableViewStyle)style>];
my.delegate = self;
my.dataSource = self;
46. CFSocket使用有哪几个步骤(10分)。
47. Core Foundation中提供了哪几种操作Socket的方法?
48. 解析XML文件有哪几种方式(10分)?
49. 自定义一个委托(15分)。
@protocol SimpleProtocol
-(void)doSomething:(NSString*)str;
@end
@interfaceSimpleClass:NSObject< SimpleProtocol >{
}
@end
@implementationSimpleClass
-(void)doSomething:(NSString *)str
{
NSLog(str);
}
@end
50. 类别的作用?继承和类别在实现中有何区别?
51.通知和协议的不同之处?
52.关于多态性
53.对于单例的理解

@interface PBPerson() <NSCopying>

@end

@implementation PBPerson

static PBPerson *_person;

+ (instancetype)allocWithZone:(struct _NSZone *)zone
{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _person = [super allocWithZone:zone];
    });
    return _person;
}

+ (instancetype)sharedPerson
{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _person = [[self alloc] init];
    });
    return _person;
}

- (id)copyWithZone:(NSZone *)zone
{
    return _person;
}
@end
54. 是否在一个视图控制器中嵌入两个tableview控制器?
55. 一个tableView是否可以关联两个不同的数据源?你会怎么处理?
56. Object -c 的类可以多重继承么?可以实现多个接口么?重写一个类的方式用继承好还是分类 好?为什么?

答案: Objective-c 只支持单继承,如果要实现多继承的话,可以通过类别和协议的方式来实现, cocoa 中所有的类都是 NSObject 的子类,多继承在这里是用 protocol 委托代理来实现的。

57. id 声明的对象有什么特性?
58. 自动释放池跟GC (垃圾回收)有什么区别?iPhone上有GC么?[poolrelease] 和[pooldrain]有什么区别?
59. 线程与进程的区别和联系?
60. ios 平台怎么做数据的持久化?coredata 和sqlite有无必然联系?coredata是一个关系型数据库吗?
61. obj-c 有多重继承么? 如果没有什么替代方法?
63. 假定输入的字符串中只包含字母和* 号。编写函数fun,功能是,除了中间和尾部的*号外,

将字符串中其他* 号全部删除。编写时,不用c的其他函数。
例:*****ABCDEFG**** 结果为:ABCDEFG****

void fun (char *a)
 {
    int j=0;
    char *p=a;
    while (*p==’*')p++;
    while (*p)
    {
        a[j++]=*p;
        p++;
    }
    a[j]=0;
 }
64. 截取字符串”20 |http://www.pacebill.com“ 中 ‘|’字符前面及后面的数据,分别输出它们。
NSString *str = “20|http://www.pacebill.com”;
NSRange range = [strrangeOfString:@"|"];
int location = range.location;
NSString *str1 = [strsubstringToIndex:location];
NSString *str2 = [str substringFromIndex:location+1];
65. 获取项目根路径,并在其下创建一个名称为userData 的目录。
// 获取根路径
NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
NSString *documentsDirectory = [paths objectAtIndex:];
// 创建文件系统管理器
NSFileManager *fileManager = [[NSFileManageralloc] init];
// 判断userData 目录是否存在
if(![fileManagerfileExistsAtPath:[NSStringstringWithFormat:@"%@/userData",documentsDirectory]]) {
// 不存在, 创建一个userData目录
[fileManagercreateDirectoryAtPath:[NSStringstringWithFormat:@"%@/userData",documentsDirectory]withIntermediateDirectories:falseattributes:nilerror:nil];
}
66. tableView 的重用机制?
67. 这段代码有什么问题吗
@implementation Person
i.(void)setAge:(int)newAge
{
self.age = newAge;
}
69. 给定一个字符串,输出本字符串中只出现一次并且最靠前的那个字符的位置?

比如”abaccddeeef” 则是b,输出2

int find(char *_str)
{
    char *p = _str;
    inti = 1;
    while (*p)
    {
        char *temp = _str;
        while (*temp)
        {
            if ((*p ==*temp)&&(p != temp))
            {
                break;
            }
            temp++;
            if (*temp == 0) {
                returni;
            }
        }
        i++;
        p++;
    }
    return-1;
}
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
intfind_char(constchar* str)
{
    staticintpos[256];
    const unsigned char* p =(const unsigned char*)str;
    inti = 0;
    if( (!str) || (!(*str)) )return -1;
    memset(pos,-1,sizeof(pos));
    while(*p){
        if(pos[*p] == -1){
            pos[*p] = p-(const unsigned char*)str;
        }else{
            pos[*p] = -2;
        }
        p++;
    }
    for(i=0;i<sizeof(pos)/sizeof(pos[0]);i++){
        if(pos[i]>=0)returnpos[i];
    }
    return -1;
}
int main()
{
    constchar* p =”abaccddeeef”;
    intpos = find_char(p);
    printf(“%d, it is’%c’\n”,pos,pos!=-1?p[pos]:’ ‘);
    p =”abcdefghijklmnopqrstuvwxyz “
    “abcdefghijklmnopqrstuwxyz”;
    pos = find_char(p);
    printf(“%d, it is’%c’\n”,pos,pos!=-1?p[pos]:’ ‘);
    return0;
}

70. objective-c 中的数字对象都有哪些,简述它们与基本数据类型的区别是什么?

71. 用NSLog 函数输出一个浮点类型,结果四舍五入,并保留一位小数
NSLog(@”%0.1f”,4.4324);

72. objective-c 中的词典对象、可变词典对象是哪个,初始化一个含有两个键值对的可变词典对象,并动态的添加和删除一条记录,输出第一条记录.
// 初始化一个可变词典,带有2 个键值对
NSMutableDictionary *dic =[NSMutableDictionarydictionaryWithObjectsAndKeys:@"value1",@"key1",@"value2",@"key2",nil];
// 添加
[dicsetObject:@"value3"forKey:@"key3"];
// 删除
[dicremoveObjectForKey:@"key3"];
// 获取(按key 获取)
[dicobjectForKey:@"key1"];
73. 获取项目根路径,并在其下创建一个名称为userData 的目录。
// 获取根路径
NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
NSString*documentsDirectory = [paths objectAtIndex:];
// 创建文件系统管理器
NSFileManager *fileManager= [[NSFileManageralloc] init];
// 判断userData 目录是否存在
if(![fileManagerfileExistsAtPath:[NSStringstringWithFormat:@"%@/userData",documentsDirectory]]) {
// 不存在, 创建一个userData目录
[fileManagercreateDirectoryAtPath:[NSStringstringWithFormat:@"%@/userData",documentsDirectory]withIntermediateDirectories:falseattributes:nilerror:nil];
}
74. do-while 与 while-do 的区别?
75. 用C 语言,求2到100内的所有素数和。
#include<stdio.h>
intisPrime(int n)
//求素数,这是最经典的算法代码。建议记住
{
    inti;
    for(i=2;i*i<=n;i++)
        if(n%i==0)
            return 0;
    return 1;
}
int main()
{
    inti,sum=0;
    for(i=2;i<100;i++)
        if( isPrime(i))
            sum+=i;
    printf(“%5d”,sum);
    return 0 ;
}
intisPrime(int n)
{
    inti;
    for(i=2;i<=n/2;i++)
    {
        if(n%i==0)
            break;
    }
    if(i>n/2)
        return1;
    else
        return0;
}
76.单件实例是什么(10分)。
上一篇下一篇

猜你喜欢

热点阅读