2017年iOS面试题总结,开发基础细节

2019-09-11 16:07栏目:专项工作
TAG:

添加实例变量
/**参数一、类名参数 二、属性名称参数 三、开辟字节长度参数 四、对其方式参数 五、参数类型 “@” 官方解释 An object (whether statically typed or typed id) (对象 静态类型或者id类型) 具体类型可参照[官方文档](https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtTypeEncodings.html)return: BOOL 是否添加成功 */BOOL isSuccess = class_addIvar(Person, "name", sizeof(NSString *), 0, "@");isSuccess?NSLog(@"添加变量成功"):NSLog(@"添加变量失败");

sd加载一张图片的时候,会先在内存里面查找是否有这张图片,如果没有会根据图片的md5后的名称去沙盒里面去寻找,是否有这张图片,如果没有会开辟线程去下载,下载完毕后加载到imageview上面,并md为名称缓存到沙盒里面。

AFN 目的:就是开辟线程请求网络数据。如果没有常住线程的话,就会每次请求网络就去开辟线程,完成之后销毁开辟线程,这样就造成资源的浪费,开辟一条常住线程,就可以避免这种浪费,我们可以在每次的网络请求都添加到这条线程。

kvo:键值观察,根据键对应的值的变化,来调用方法。注册观察者:addObserver:forKeyPath:options:context:实现观察者:observeValueForKeyPath:ofObject:change:context:移除观察者:removeObserver:forKeyPath:(对象销毁,必须移除观察者)注意使用kvo监听A对象的时候,监听的本质不是这个A对象,而是系统创建的一个中间对象NSKVONotifying_A并继承A对象,并且A对象的isa指针指向的也不是A的类,而是这个NSKVONotifying_A对象kvo详解kvo详解2

kvc:键值赋值,使用最多的即使字典转模型。利用runtime获取对象的所有成员变量, 在根据kvc键值赋值,进行字典转模型setValue: forKey: 只查找本类里面的属性setValue: forKeyPath:会查找本类里面属性,没有会继续查找父类里面属性。kvc详解

项目自带的Assets.xcassets蓝色文件夹,这个和自建的黄色文件夹的区别:

8.1带有tabbar和navbar的安全区域

图片 1带有tabbar和navbar的安全区域

Block

block:本质就是一个object-c对象.block:存储位置,可能分为3个地方:代码去,堆区、栈区(ARC情况下会自动拷贝到堆区,因此ARC下只能有两个地方:代码去、堆区)代码区:不访问栈区的变量,且不访问堆区的变量(alloc创建的对象),此时block存放在代码去。堆区:访问了处于栈区的变量,或者堆区的变量,此时block存放在堆区。–需要注意实际是放在栈区,在ARC情况下会自动拷贝到堆区,如果不是ARC则存放在栈区,所在函数执行完毕就回释放,想再外面调用需要用copy指向它,这样就拷贝到了堆区,strong属性不会拷贝、会造成野指针错区。

默认情况下,block里面的变量,拷贝进去的是变量的值,而不是指向变量的内存的指针。当使用__block修饰后的变量,拷贝到block里面的就是指向变量的指针,所以我们就可以修改变量的值。

 Person *p = [[Person alloc]init];[p setPersonBlock:^(NSString *str) { p.name = str;}];

图片 2realm-1

其实底部角圆角的距离是34,我们可以在任意界面打印安全试图就可以找到,在viewSafeAreaInsetsDidChange方法里面打印NSLog(@"%@",NSStringFromUIEdgeInsets(self.view.safeAreaInsets));即可知道安全区域的边界注意:1.介绍viewSafeAreaInsetsDidChange方法系统调用或者你设置控制器additionalSafeAreaInsets安全区域边界2.顺序viewSafeAreaInsetsDidChange调用顺序实在viewWillAppear之后,在viewWillLayoutSubvies之前调用重点 :设置你底部的按钮按钮底部距离底部34即可,但是不要让上面的试图的高度盖住底部按钮重点 :设置你底部的按钮按钮底部距离底部34即可重点 :设置你底部的按钮按钮底部距离底部34即可

中级

终端命令:

这就是自己写代码的不规范造成的,曾经有个程序员给说过:不要在代码里面看到重复多次的数字、字符串等的使用,如果重复多次就要抽取出来使用常量来表示,如果当时听他的话,能出现这个效果,吓的小遍立马改为重点 :别直接写64了,也别直接写88,写宏吧重点:别直接写64了,也别直接写88,写宏吧重点:别直接写64了,也别直接写88,写宏吧

1.为什么说Objective-C是一门动态的语言?

1.object-c类的类型和数据变量的类型都是在运行是确定的,而不是在编译时确定。例如:多态特性,我们可以使用父类指针来指向子类对象,并且可以用来调用子类的方法。运行时特性,我们可以动态的添加方法,或者替换方法。

一 工具

友情链接:

项目

点击Assets.xcassets文件,设置Render As选项选择Original Image即可.

 #define SafeAreaTopHeight (kWJScreenHeight == 812.0 ? 88 : 64)

2.讲一下MVC和MVVM,MVP?

MVC:简单来说就是,逻辑、试图、数据进行分层,实现解耦。MVVM:是Model-View-ViewMode模式的简称。由视图、视图模型(ViewModel)、模型三部分组成.比MVC更加释放控制器臃肿,将一部分逻辑(耗时,公共方法,网络请求等)和数据的处理等操作从控制器里面搬运到ViewModel中MVVM的特点:

  1. 低耦合。View可以独立于Model变化和修改,一个ViewModel可以绑定到不同的View上,当View变化的时候Model可以不变,当Model变化的时候View也可以不变。
  2. 可重用性。可以把一些视图的逻辑放在ViewModel里面,让很多View重用这段视图逻辑。
  3. 独立开发。开发人员可以专注与业务逻辑和数据的开发(ViewModel)。设计人员可以专注于界面的设计。
  1. 可测试性。可以针对ViewModel来对界面进行测试

MVP:本小编没有接触,希望可以得到大家的帮助。可以在下面留言。

现在只需要Blok块即可完成各种动画

图片 3我是iPhone X

创建类:
Class MyClass = objc_allocateClassPair([NSObject class], "Person", 0);

指定了UILable的高度,文本高度小于UILable的高度,需要文本的top方向那边内边距为0,一般就是要求文本对齐左上角.

xcode 9 模拟器都带一个套套,像我这种强迫症看着淡淡的忧伤,没办法直接干掉算了``如果看着大小在电脑上面不合适,就把鼠标放到四个角的时候,可以随便拖大小的

1.每天上班都是活跃在各大iOS开发群,碰到别人的问题,自己不懂的都悄悄记下来,自己去百度,也能学到一些东西,但是不能系统的学习.2.下班都是看看别人写好的博客,也能学到一些技术,但是这样只能依赖于别人。3.周六日自己在看别人源码,试着去学习别人写框架的逻辑。4.还试着看了写官方文档,但是碍于本人的英语水平的差距,无法去理解文档上面的思想。5.试着去学习了PHP,虽说现在可以写后台和Api接口,但是关于PHP如何运行,一窍不通。

a.在自定义的cell的.h文件定义一个protocol协议,协议方法可以按自己需求声明。

我们可以看出,所有的边框都是圆角,也是很符合苹果的设计规则,扁平化更凸现出来。有图我可能可以看出,iPhone X的状态栏由原来的20变更为现在的44,来凸现齐刘海,就是这个状态栏的改变变成了多少程序

版权声明:本文由ag真人发布于专项工作,转载请注明出处:2017年iOS面试题总结,开发基础细节