首页 > 代码库 > iOS 面试题:OC基本概念题
iOS 面试题:OC基本概念题
1.什么是类和对象?
类是一组具有相同特征和功能的事物的抽象
对象描述了一个物体的特征和行为实现
类是对象的抽象 对象是类的实例
2.OC中定义类,创建对象,使用对象.
OC中定义类分为接口部分,实现部分
接口部分:对外声明类的特征和行为
实现部分:实现方法,即类的行为实现
创建对象需要进行分配内存空间和初始
3.声明方法,根据需求.区分:方法声明,方法实现,方法执行
4.继承.继承的所有特点
子类可以继承父类所有的声明的方法和除私有的以外实例变量
父类不能使用子类所创建的方法和实例变量
5.self和super
self 给对象发送消息 执行该类的方法
super 给对象发送消息 执行父类的方法
6.初始化方法.会根据需求自定义,能够写出完整的实现
例: - (id) initWithName:(NSString *)name
sex:(NSString *)sex
age:(int)age
{
self = [super init];
if(self)
{
self.name = name;
self.sex = sex;
_age = age
}
return self;
}
7.实例变量的可见度,以及各自的特点,默认可见度是什么?
如何在类的外部,操作默认可见度的实例变量.
@public 公有的
@protected 保护的(默认的)
@private 私有的
在类的外部,操作默认可见度的实例变量 可以定义实例变量的属性,也可以声明和实现setter和getter方法
8.什么是setter,getter方法,如何声明?
设置器 - (void) setName:(NSString *)name
访问器 - (NSString *) name;
9.属性的作用.如何声明属性,如何实现属性(声明和实现所对应的关键字)
作用:提供外部访问 自动生成setter和getter方法
@propert (属性的属性) 返回值或参数类型 属性的名字
@synthesize 属性的名字 = 实例变量
10.属性的三个特性?没有特性都有哪些内容,使用场景,特点作用
读写设置:readonly(只读) readwrite(默认)
语义设置: assign(默认 既可以修饰基本数据类型还可以修饰对象)
retain(修饰对象)
copy(修饰对象 并且所修饰的对象要遵守<NSCoping>协议)
原子性:noatomic(不能保证多线程安全)
atomic(默认 保证多线程安全)
11.属性的setter和getter方法的内部实现
用retain修饰
(void) setName:(NSString *)name
{
if(_name = name)
{
[_name release];
_name = [name retain];
}
}
(NSString *) name
{
return [[_name retain] autorelease];
}
12.类的扩展.(类目 延展 协议(一对方法)).代理(执行协议里方法的对象)
类目(category):为没有源代码的类添加方法 没有实例变量
类目的声明: @interface 类的名字 (类目的名字)
@end
类目的实现: @implementation 类的名字
@end
注:类目的方法若与类的方法相同 类目的方法优先级高
延展(extention):(匿名类目)管理”私有”方法 写在.m文件中 可以有实例变量
延展的声明:@interface 类的名字 ()
@end
注:声明在延展里的方法必须实现
协议(protocol):没有方法实现 只有方法声明 只有.h文件
默认关键字@require 必须实现 @optionol 可以不实现
协议的声明:@protocol 协议的名字 <NSobject>
注:一个类可以接受多个协议,在< >中用”,”分隔开.用协议可以实现多继承
13.foundation(框架).NSString,NSArray,NSDictionary,NSSet(对象的内容互异).(区分可变和不可变,创建对象,常用方法,类的特点)
14.内存管理
对内存管理的理解:
对象所有权:通过retain alloc copy 是对象的引用计数加1
内存泄露:只分配使用了一块内存,没有释放
过度释放:释放多次
野指针:指针指向不存在的对象