iOS面试题汇总1

一.OC的类可以多重继承么?可以实现多个接口么?Category是什么?重写一个类的方式用继承还是分类好?为什么?
不可以多重继承;可以实现多个接口,通过实现多个接口可以完成C++的多重即成;
Category:是类别,用于向已经从在的类添加方法从而达到扩展已有类的目的,和子类不同的是,Category不能用于向北扩展类添加实例变量,通常作为一种组织框架代码的工具来使用.
Category的用途:
1.在不创建继承类的情况下实现对已由类的拓展。
2.简化类的开发工作
3.将常用的相关方法分组。
4.在没有源代码的情况下可以用来修复BUG
一般情况下用分类好,用Category去重写类的方法,仅对本Cayegory有效,不会影响到其他类与原有类的关系。

二.#import和#include由什么区别,@class呢,#import<>跟#import""又有什么区别?
1.#import是OC导入头文件的关键字,#include是C/C++导入头文件的关键字,使用#import头文件会自动只导入一次不会重复导入,相当于#include和#pragma once;
2.@class告诉编译器某个类的声明,当执行时,才会去查看类的实现文件,可以解决头文件的互相饱含;
3.#improt<>用来包含系统的头文件,#imoport""用来包含用户头文件

三.属性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.

四.写一个setter方法用于完成@property(nonatomic,retain)NSStringname,写一个setter方法用于完成@property(nonatomic,copy)NSStringname

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

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

五.对于语句NSString *obj = [NSData alloc]init];obj在编译时和运行时分别是什么类型的对象。
编译时是字符串类型,运行时是NSData类型对象

六.常见的OC数据类型有哪些,和C的基本数据类型有什么区别。
NSString,NSArray,NSMutableArray,NSData等等,这些都是class,创建后便是对象,而C语言的基本数据类型是int,知识一定子节的内存空间,用于存放数值。

七.id声明的对象有什么特性
id声明的对象具有运行时的特性,可以指向任意类型的OC的对象

八.OC如何对内存管理的,说说你的看法和解决方法。
1.ARC(自动内存计数):通过alloc-initial方法创建的,创建后引用计数+1,此后每retain一次引用计数+1,那么在程序中做相应次数的release就可以了。
2.手动内存技术:一般由类的静态方法创建,函数名不会出现alloc或init滋养,创建后引用计数+0,在函数出栈后释放,相当于一个栈上的局部变量,也可以通过retain延长对象的生存期。
3.内存池:可以通过创建和释放内存池控制内存申请和回收的时机。由autorelease加入系统内存池,内存池时可以嵌套的,每个内存池都需要由一个创建释放对,将一个对象加入到最内层的系统内存池,当我们释放这个内存池时,其中的对象都会被释放。

八.使用nonatomic一定是线程安全的吗?
nonatomic的内存管理语义是非原子的,非原子的操作本来就是线程不安全的,而atomic的操作是原子的,但并不代表线程安全,能够增加正确机率,更好的避免线程错误,但是仍然是线程不安全的。
当使用nonatomic的时候,属性的setter和getter操作是非原子的,所以多个线程对某一属性进行读和写的操作,属性的最终结果是不能预测的。
atomic是线程安全的,nonatomic是线程不安全的。如果只是单线程操作的话用nonatomic最好,因为后者效率高。

九.如何高性能的给UIImageView加个圆角? (不准说layer.cornerRadius!)

一般情况下给 UIImageView 或者说 UIKit 的控件添加圆角都是改变clipsToBounds和layer.cornerRadius, 这样大约两行代码就可以解决. 但是, 这样使用这样的方法会强制 Core Animation 提前渲染屏幕的离屏绘制, 而离屏绘制就会为性能带来负面影响.
我们也可以使用另一种比较复杂的方式来为图片添加圆角, 这里就用到了贝塞尔曲线.
UIImageViewimageView= [[UIImageView alloc] initWithFrame:CGRectMake(0,0,100,100)]; imageView.center = CGPointMake(200,300); UIImageanotherImage= [UIImage imageNamed:@"image"]; UIGraphicsBeginImageContextWithOptions(imageView.bounds.size, NO, 1.0); [[UIBezierPath bezierPathWithRoundedRect:imageView.boundscornerRadius:50] addClip];[anotherImage drawInRect:imageView.bounds];imageView.image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); [self.view addSubview:imageView];

十.http的POST和GET有什么区别
GET类型的请求是幂等的,而POST请求是有副作用的,GET用于获取一些资源而POST用于改变一些资源,这可能会创建新的资源或者更新已有的资源。POST请求比GET请求更加安全,也可以传输更多的信息。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,393评论 30 472
  • 注:此文章来源:Job_Yang 的简书 1. Object-c的类可以多重继承么?可以实现多个接口么?Categ...
    广益散人阅读 5,169评论 0 13
  • 史上最全的iOS面试题及答案 iOS面试小贴士———————————————回答好下面的足够了----------...
    Style_伟阅读 7,126评论 0 35
  • iOS面试小贴士 ———————————————回答好下面的足够了------------------------...
    不言不爱阅读 6,435评论 0 7
  • 锦城花满饮琼楼,少年摇扇许风流 金尊斗杯歌与酒,笑谈他日我封侯 最温情红袖添香绕指柔, 再难舍轻舟别离相执手, 点...
    顾执七言阅读 2,472评论 0 0

友情链接更多精彩内容