iOS 面试心声-面试题

1.给定一个字符串,输出本字符串中只出现一次并且最靠前的那个字符的位置?

比如“abaccddeeef”则是 b,输出 2 答:

int main()
{
    char a[80] = "abaccddeeef\0";
    char ch;
    int i, m, b[80];
    int flag = 0;
    ch = getchar();//获取一个字符
    m = strlen(a);
    for (i = 0; i < m; ++i){
        if (a[i] == ch){//找到了,直接判断是否相等
            b[flag] = i+1;//记录位置
            flag += 1;
        }
     }
    if (flag == 0) printf ("no");
    else {
        printf ("%d\n", flag);
        for (i = 0; i < flag; i++){//对位置进行输出,用循环
            printf ("%d ", b[i]);
        }
        printf ("\n");
    }
    return 0; 
}

2.实现一个冒泡排序或者快速排序

答:冒泡排序:

int array[5] = { 28,27,36,45,8};
for (int i = 0; i < 4; i++) {
    for(int j = 0; j < 4; j++) {
        if (array[j] > array [j + 1]){
            int temp = array[j];
            array[j] = array[j + 1];
            array[j + 1] = temp;
        }
    }
}
for(int i = 0; i < 5; i++) {
    printf("%d\n",array[i]);
}

3.请编写一个函数用于计算阶乘

答:

int f(int i){ 
    int t=1,j;
    for(j=1;j<=i;j++)
        t=t*j;
    return t;
}

4.Cocoa Touch 提供了几种 Core

Animation 过渡类? 答:Cocoa Touch 提供了 4 种 Core Animation 过渡类型,分别为:交叉淡化、推挤、显示和覆盖。

5.iOS 平台怎么做数据的持久化?coredata 和 sqlite 有无必然联系?coredata 是一个关系型数据吗?

答:数据的持久化本质上都是就是写文件,但从逻辑上又分成很多种,比如写入沙盒,比如存到网络上,比如写入数据库。
core data 是对 sqlite 的封装,因为 sqlite 是 c 语言的 api,然而有人也需要 obj- c 的 api,所以有了 core data ,另外,core data 不仅仅是把 c 的 api 翻译成 oc
的 api,还提供了一些管理的功能,使用更加方便。
• App 升级之后数据库字段或者表有更改会导致 crash,CoreData 的版本管理和数据迁移变得非常有用,手动写 sql 语句操作还是麻烦一些。
• CoreData 不光能操纵 SQLite,CoreData 和 iCloud 的结合也很好,如果有这方面需求的话优先考虑 CoreData。
• CoreData 并不是直接操纵数据库,比如:使用 CoreData 时不能设置数据库的主键,目前仍需要手动操作。

6.Object-c 的类可以多重继承么?可以实现多个接口么?category 是什么?重写一个类的方式用继承好还是分类好?为什么? 答: Object-c 的类不可以多重继承;可以实现多个接口,通过实现多个接口可以

完成 C++的多重继承;Category 是类别,一般情况用分类好,用 Category 去重写类的方法,仅对本 Category 有效,不会影响到其他类与原有类的关系。

7.#import 跟#include 有什么区别,@class 呢?#import<>跟#import””有什么区别?

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

8.属性 readwrite,readonly,assin,retain,copy,nonatomic 各是什么作用,在哪种情况下用?

答:
readwrite 是可读可写特性;需要生成 getter 方法和 setter 方法时 readonly 是只读特性只会生成 getter 方法不会生成 setter 方法;
不希望属性在类外改变assign 是赋值特性,setter 方法将传入参数赋值给实例变量;仅设置变量时;
retain 表示持有特性,setter 方法将传入参数先保留,再赋值,传入参数的retaincount 会+1;
copy 表示拷贝特性,setter 方法将传入对象复制一份;需要完全一份新的变量
时。
nonatomic 非原子操作,决定编译器生成的 setter
getter 是否是原子操作,atomic 表示多线程安全,一般使用 nonatomic

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

答:

-(void)setName:(NSString *) str
{
    [str retain];
    [name release];
    name = str;
}
- (void)setName:(NSString *)str
{
    id t = [str copy];
    [name release];
    name = t; 
}

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

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

...

还有 94页,204道面试题。
如需要更多学习材料百度网盘链接地址,请到微信小程序搜索“斌雅资料”,序号:11,密钥:2233,查询资料获取。

你可能感兴趣的:(iOS 面试心声-面试题)