概述
1. OC有多继承吗?没有,用什么代替?
答:没有多继承。cocoa中所有类都是NSObject的子类,多继承用@protocol 委托代理来实现。
2. OC中有私有方法吗?有私有变量吗?
答:私有变量有。在类的实现即.m文件中也可以声明成员变量,但是因为在其他文件中通常都只是包含头文件而不会包含实现文件,所以在.m文件中声明的成员变量就是@private的。
OC中没有真正的私有方法。
3. #import #include @class 区别?
① 在.h文件中使用@class(减少编译时间),如使用请在.m文件中#import;
② #import 可以避免两个类之间互相引用,#include 不可以;
③ 头文件使用自定义代理、Category、继承的时候,需要使用#import;
④ <> 和 " "区别,前者直接使用系统库路径,后者会从用户、安装、系统目录寻找;
⑤ 两个类互相引用,一个需用@class;
4. 进程、线程,怎么去理解?
答:一个进程包含多个线程。
进程有独立的地址空间,一个进程崩溃,不会对其他的进程产生影响,而线程没有单独的地址空间,一个线程死掉等于整个进程死掉。
所以,理论上多进程的程序比多线程的程序健壮,但进程切换过程耗费资源大,效率要差。如果要求同时进行(并行)某些操作,只能用线程。
5. 堆、栈,怎么去理解?
堆栈的区别:
① 堆空间的内存是动态分配的、一般存放对象、并且需要手动释放内存。
② 栈空间的内存是由系统自动分配、一般存放局部变量等、不需要手动管理内存。
管理方式不同:
堆,释放工作要人为控制,容易产生内存泄露(memory leak)。
栈,由编译器自动管理。
从申请内存大小方面不同:
栈,空间比较小<2M>。
堆,空间比较大。
从数据存储方面讲:
栈空间中一般存储基本类型,对象的地址。
堆空间一般存放对象本身,block的copy等。
6. 浅拷贝、深拷贝的区别?
浅拷贝,只复制指向对象的指针,但对象本身资源还只有一份,就有两个指针指向同一个对象;
深拷贝,复制引用对象本身,就有两个指针分别指向两个对象。
NSString *str = @"123"; NSString *strCopy = [str copy]; NSMutableString *mustr = [str copy]; NSMutableString *muCopy = [str mutableCopy]; [mustr appendString:@"4"]; //会直接崩溃 [muCopy appendString:@"5"]; NSLog(@"str = %@ strCopy = %@ mustr = %@ muCopy = %@",str,strCopy,mustr,muCopy); NSLog(@"str地址%p strCopy地址%p mustr地址%p muCopy地址%p",str ,strCopy,mustr,muCopy);
输出结果:
7. 返回到指定的页面?
for (UIViewController *controllers in self.navigationController.viewControllers) { if ([controllers isKindOfClass:[指定的页面 class]]) { [self.navigationController popToViewController:controllers animated:YES]; } }
8. 取余、取模的理解?
i = 14;
i % 2:取余,结果等于0或者1;
i / 2:取模,结果等于0、1、2、3、4、5、6
9. 点击不同按钮进入到不同对应的控制器。
NSString *vcClassName = [button.currentTitle stringByAppendingString:@"viewcontroller"]; UIViewController *vc = [[NSClassFromString(vcClassName) alloc]init]; vc.title = button.currentTitle; [self.navigationController pushViewController:vc animated:YES];
10. 调用打电话API。
① 调用完之后,iPhone界面会停留在电话界面。
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel://10010"]];
② 调用完之后,会返回到应用程序的界面。
UIWebView *callwebview = [[UIWebView alloc]init]; NSURL *telUrl = [NSURL URLWithString:@"tel://10086"]; [callwebview loadRequest:[NSURLRequest requestWithURL:telUrl]]; [self.view addSubview:callwebview];
转载于:https://www.cnblogs.com/chenjie005/p/11227252.html
最后
以上就是自觉黄蜂为你收集整理的iOS 不可忽视的知识点的全部内容,希望文章能够帮你解决iOS 不可忽视的知识点所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复