OC一些概念上的理解

1、OC中类可以实现多继承吗?可以实现多接口吗?

Key:OC不可以实现多继承,但可以实现多接口。

2、Category是什么,它的作用是什么?和继承的区别?和Extension的区别?

Key:Category是分类,一般在不获悉,不改变原代码的情况下添加新方法,只能添加不能修改删除,并且不能够添加属性,如果扩展的方法和原方法重名,则会替代原方法,不像继承可以通过super调用。此外继承可以添加修改删除父类方法并且可以增加属性。Extension相比分类可以添加属性,添加的方法一定要实现,且都是私有的。

3、#import和#include有什么区别,@class干什么的,#import “”和#import <> 区别?

Key:#import是OC导入头文件的关键字,#include是C/C++导入头文件关键字。但是import比include智能一些,可以重复导入它会自动处理不会报错。@class告诉编译器某个类的声明,可以解决头文件互相引用不能编译的错误。#import<>用于引入系统的头文件,#import”“用于引入用户的头文件。

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

Key:readwrite可读写特性,需要生成getter和setter方法的时候使用。
readonly只读属性,只能生成getter不能setter,不希望属性在类外改变。
assign是赋值特性,在iOS开发也就是weak属性,被弱引用的对象在没有强引用指向的情况下还是会被消除,它比assign多了一个功能,在对象消失时自动把指针指向nil。
retain表示持有特性,在iOS开发也就是strong属性,它有引用计数特性,只要还有强引用指向对象就不可销毁。
copy复制特性,当需要一份新变量时。

5、写一个setter方法完成@property (nonatomic, retain) NSString *name, 写一个setter完成@property (nonatomic, copy) NSString *name。

Key:

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

6、对于NSString *obj = [[NSData alloc] init],obj在编译和运行时分别是什么类型对象?

Key:编译时是NSString类型,运行时是NSData类型。

7、常见OC数据类型有哪些?和C的基本数据类型有什么区别?NSInteger和Int区别什么?

Key:OC基本类型一半都是NS打头的,NSNumber, NSArray, NSMutableArray, NSData等,一般都是类类型,创建后就是对象。C中基本数据类型int,只是一定字节的内存空间,用于存放数值;NSInteger不是NSNumber或者NSObject的子类,NSInteger是Int或者Long的别名,区别在于NSInteger会根据系统是32还是64位决定是否为Int还是Long。

8、id声明对象有什么特性?

Key:Id声明对象具有运行时的特性,可以指向任意类型的OC对象。有点像java里object,但是java由于没有指针说法反而比较像NSObject类型,拿来转换使用,感觉比较智能。。。

9、OC如何进行内存管理,看法和解决办法。

Key:OC的内存管理主要有自动内存计数、手动计数和内存池。
1)ARC机制,介于自动内存计数和手动计数之间,在iOS上一般都采用这种内存管理机制。当没有强引用时自动回收内存。
2)手动回收内存没有用过,应该调用delloc方法进行回收吧。
3)内存池autorelease,释放内存池时,其中对象也会被释放。

10、nonatomic和atomic区别?

Key:1)atomic提供多线程安全,防止未写完成的时候被另外线程读取造成数据错误。解析器保留并释放返回值。
2)nonatomic一般在不用于多线程的应用中使用,解析器只是简单返回值,相比atomic提高了性能,由于它的轻量,在不用于多线程的iOS应用中普遍使用。

11、程序输出什么

NSMutableArray *ary = [[NSMutableArray array] retain];
NSString *str = [NSString stringWithFormat:@"test"];
[str retain];
[ary addObject:str];
NSLog(@"%@%d", str, [str retainCount]);
[str retain];
[str release];
[str release];
NSLog(@"%@%d", str, [str retainCount]);
[ary removeAllObjects];
NSLog(@"%@%d", str, [str retainCount]);

Key:str的创建retainCount+1,retain+1,加入数组>自动+1。
str的retain+1,两次release-2,还剩2
数组删除所有对象,自动-1,还剩1

12、OC创建线程的方法是什么?

Key:NSThread创建,使用GCD的dispatch,用子类化的NSOperation,然后加入NSOperationQueue。

13、MVC设计模式是什么?你还熟悉哪些开发模式?

Key:MVC,Model,View,Controller,model和view不能够直接通信,需要Controller进行交流,现在企业系统架构设计采用4层,信息系统层(数据库),数据持久层PersistenceLayer,业务逻辑层LogicBussinessLayer和表示层PresentationLayer,就是用这种设计模式。
此外还有代理模式,也就是利用协议delegate执行方法,它允许一个类在需要的时刻通过代理通知其它类,而不需要获取那些类的指针,简化了框架的复杂度。
观察者模式,通过消息通知机制实现,一方发出通知,由一方或者多方addObserver的监听者来接收传递过来的数据等。
单例模式:一个类在程序的生命周期里只产生一个对象,比如UIApplication,系统拥有一个全局变量,任何地方都可以使用。

14、深复制和浅复制区别?

Key:浅复制,只复制指向对象的指针,对象只有一个,却产生了一个新的指针指向这个对象。
深复制:对象和指针都复制一份。

15、KVO和KVC?

Key:KVC是键值编码标识属性,每一个value对应一个key,有点像字典类型。
KVO是一种消息通知机制,针对特定的属性接收通知。

16、OC为什么被称为运行时语言?

Key:主要是数据类型的确定由运行时才最终确定。

17、NSManageObject、NSManageObjectContext和NSPredicate?

Key:NSManageObject实现了CoreData的所需的基本功能,由NSManageObjectContext对象负责应用和数据库之间的交互。NSPredicate通过给定的逻辑条件对数据进行筛选。

18、对Block的理解

Key:闭包是可以看作是一个匿名的方法,方便开发,在闭包内可以访问局部变量和全局变量等,大幅提高执行效率,多核心CPU可以直接处理block指令。

19、ViewDidLoad和ViewDidAppear和ViewWillAppear

Key:打开应用程序,先执行ViewWillAppear,再执行ViewDidLoad和ViewDidAppear,但是load在程序打开只调用一次,而Appear会在视图出现的时候就会调用。

20、同步,异步,get,post

Key:1、同步请求:程序与用户停止交互,直至服务器返回数据完成,则可进行下一步操作
2、异步请求:不会阻塞主线程,会建立一个新的线程来操作,用户依然可以对UI进行
操作
3、Get请求:地址最多255字节
4、Post请求:参数放在body里

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值