| 设为主页 | 保存桌面 | 手机版 | 二维码
普通会员

河南蓝鸥

教育 培训 郑州iOS培训 iOS开发培训 iOS培训

产品分类
  • 暂无分类
站内搜索
 
友情链接
您当前的位置:首页 » 供应产品 » 郑州iOS培训技术知识学习
郑州iOS培训技术知识学习
点击图片查看原图
产品: 浏览次数:0郑州iOS培训技术知识学习 
品牌: iOS开发培训,河南iOS培训,iOS培训机构
单价: 面议
最小起订量:
供货总量:
发货期限: 自买家付款之日起 3 天内发货
有效期至: 长期有效
最后更新: 2016-03-11
  询价
详细信息
 前言

今天某某提供的一份面试题,郑州iOS培训看了看,还是整理一下,分享给大家吧。对于新手、刚出来找工作的或者准备要面临找工作的小伙伴们来说,笔者所提供的参考答案一定会有帮助的。

题照

image

1、#import和#include的区别,@class代表什么?

参考答案:

这里老生常谈的问题了!#import和#include指令都是用于包含头文件的,前者是保证只会包含一次,不会重复包含;后者是c语言中原来就有的包含头文件的指令,在objc开发中,若是c文件,一件会使用#include指令来包含头文件,为了防止重复包含,通常会加上条件编译,如:

1

2

3

4

5

6

7

8

9

// 随手写的例子

// 若已经定义过则不再定义之,这是防止重复包含的手段

#ifndef __HYB__GRIDVIEWCONTROLLER__

#define kScreenWidth ...

#endif

@class是类前向声明的指令,相当于告诉编译器有这样一个类,但是类的定义在后面提供。在编译时期,编译器看到@class指令声明了对应的类型,是可以正常编译过的。这是很常用的指令,主要是防止循环引用。

如果有循环依赖关系,如:A–>B, B–>A这样的相互依赖关系,如果使用#import来相互包含,那么就会出现编译错误,如果使用@class在两个类的头文件中相互声明,则不会有编译错误出现。

2、谈谈Objective-C的内存管理方式及过程

参考答案:

对于Objective-C,在MRC下内存是手动管理的,而在ARC下,我们不用手动去添加retain/release,但是其内存管理法则是一样的。

内存管理黄金法则:谁使对象的引用计数+1,谁就负责管理使该对象的引用计数-1。

说说内存管理的过程:

在MRC下,对于需要手动释放的对象的内存管理,我们通过release使对象引用计数-1,若其引用计数变成0,则对象会被立刻释放掉。对于autorelease交给自动释放池管理的对象,每个runloop循环结束就会去自动释放池中使所有autorelease类型对象的引用计数减一,若变成0,则释放之。

在ARC下,我们没有不能直接调用retain/release来管理释放,都是交给自动释放池来管理的。因此,若创建临时变量,想要使用完就释放之,需要在临时变量放到新创建的自动释放池里,这样就可以使用完后就到达了自动释放池的一个循环,就会去使对象引用计数减一,变成0后释放之。

**后:对于交给自动释放池管理的对象,是在每个run loop事件循环结束时才会去使对象引用计数减一,此时引用计数为0的才会得到释放。

3、Objective-C有私有方法吗?私有变量呢?

参考答案:

在Objective-C中,没有实实存在的私有方法。通常所谓的私有方法就是放在.m文件中声明和实现,外部不能直接看到而已,但是若我们知道有这么一个API,我们是可以调用的。比如,在苹果上架会因为使用了苹果的所谓的私有API而被拒,而这个所谓的私有API就是指苹果没有公司出来,但是我们通过其它方式可以看到苹果的内部有这样一个API可以实现某些不公开的功能。

私有变量是有的,可以通过@private来声明私有变量。比如:

1

2

3

4

5

@interface HYBTestModel: NSObject {

@private NSString *_privateName;

}

如果我们没有使用@private声明,它是受保护的,外部也不能直接通过对象给变量赋值:

1

2

3

4

// error

testModel->_privateName = @"报错了,提示成员变量是受保护的";

4、Objective-C有多继承吗?没有的话用什么代替?Cocoa中所有的类都是NSObject的子类?

参考答案:

Objective-C没有多继承,这是去掉C++中多继承的特性,改成使用protocol来代替。Cocoa中所有的类都是NSObject的子类,这是正确的。如果学习过runtime,应该知道根类是NSOjbect,它元类的isa指针指向的是NSObject。参考下图:

image

5、浅拷贝与深拷贝的区别是什么

参考答案:

用**简单的话说:浅拷贝就是指针拷贝(指向原有内存空间),而深拷贝是内容拷贝(有新的内存空间)。

或者说:浅复制并不拷贝对象本身而仅仅是拷贝指向对象的指针;深复制是直接拷贝整个对象内存到另一块内存中。

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

参考答案:

作用分别是:

  • readwrite:代表可读可写,会生成getter和setter方法
  • readonly:代表只读,只生成getter方法,不会生成setter方法
  • assign:代表普通赋值,通常用于非对象类型
  • retain:MRC下才能手动使用,与ARC下的strong一样,指定强引用,引用计数加1
  • copy:代表拷贝,也是强引用,引用计数加1,进行指针拷贝
  • nonatomic:代表非原子操作,非线程安全,但可提高性能

在哪种情况使用:

  • readwrite:默认就是,通过不用显示指定,需要生成setter和getter时使用
  • readonly:当不希望生成setter时使用
  • assign:通常是非对象类型使用
  • retain:MRC下才能使用,表示对象强引用
  • copy:生成不可变对象、需要拷贝时使用
  • nonatomic:不要求线程安全时使用,可提高性能,通常都会使用

更多面试题编程算法学习应对面试。

蓝鸥郑州iOS开发培训是业界口碑**iOS培训机构,培训期是四个月左右,四个月脱产班(脱产班顾名思义就是脱离生产,也就是不工作,全身心的学习,也就是全日制的学习),可以免费试听,蓝鸥的老师在行业里有3年以上工作项目经验的。目前iOS开发是非常有前景的职业方向,月薪维持在8k-10k,随着时间及经验的积累薪资待遇也逐渐提升(看个人技术、项目、开发、及管理水平,15k-20k的也大有人在),学生可选择全款学习亦可贷学费方式参加学习,工作之后2-3个月就有能力将学费还清。
QQ:2290909800 QQ交流群:493076664;97682894;咨询电话(Phone):0371-55397597 15838221845
地址(Address): 郑州市高新区莲花街牡丹路教育科技产业园区B座 网址(website):http://hn.lanou3g.com/

询价单
0条  相关评论