A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

    这些面试题,大多是Objectiv-C 的基础知识,很适合已经学完OC的人看,既可以检测自己的学习情况,也可拿来应对面试。

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

  1. - (void)setName:(NSString *)name
  2. {
  3.       if(_name != name)
  4.       {
  5.            [_name release];
  6.            _name = [name retain];
  7.       }
  8. }
复制代码
  1. - (void)setName:(NSString *)str  
  2. {  
  3.     id t = [str copy];  
  4.     [name release];  
  5.     name = t;  
  6. }  
复制代码

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. Object C中创建线程的方法是什么?如果在主线程中执行代码,方法是什么?如果想延时执行代码、方法又是什么?

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

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

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


31 个回复

倒序浏览
第一题,category不是会覆盖原来的类吗?
回复 使用道具 举报
cqswzqcj 发表于 2016-1-26 16:17
第一题,category不是会覆盖原来的类吗?

打错了,重写后会覆盖原来类的方法吗?
回复 使用道具 举报
cqswzqcj 发表于 2016-1-26 16:17
第一题,category不是会覆盖原来的类吗?

打错了,重写后会覆盖原来类的方法吗?
回复 使用道具 举报
马克一下。
回复 使用道具 举报
学习了,谢谢楼主分享
回复 使用道具 举报
谢谢分享
回复 使用道具 举报
谢谢楼主分享        
回复 使用道具 举报
chensc 金牌黑马 2016-1-28 20:31:06
9#
学习学习!
回复 使用道具 举报
多谢分享
回复 使用道具 举报
学习学习!
回复 使用道具 举报
多谢分享
回复 使用道具 举报
多谢楼主分享,可以自测了
回复 使用道具 举报
谢谢楼主
回复 使用道具 举报
刚看完c...oc还没开始先收藏了...多谢分享
回复 使用道具 举报
学习学习!
回复 使用道具 举报
谢谢分享
回复 使用道具 举报
受益~~~~~~~~~
回复 使用道具 举报
你好,面试时,会有c的编程题吗
回复 使用道具 举报
谢谢分享        
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马