1,关于苹果的一些基本常识设置~通用~往下拉~密码锁定…至于删除软件,按住软件图标使其抖动,点右上角的红色叉叉…
2,iOS基础知识 一 Runtime是iOS核心运行机制之一,iOS App加载库、加载类、执行方法调用,全靠Runtime,这一块的知识个人认为是最基础的,基本面试必问 。1)iOS调用一个方法时,实际上会调用objc_msgSend(receiver, selector, arg1, arg2, ...),该方法第一个参数是消息接收者,第二个参数是方法名,剩下的参数是方法参数;2)iOS调用一个方法时,会先去该类的方法缓存列表里面查找是否有该方法,如果有直接调用,否则走第3)步;3)去该类的方法列表里面找 , 找到直接调用,把方法加入缓存列表;否则走第4)步;4)沿着该类的继承链继续查找,找到直接调用,把方法加入缓存列表;否则消息转发流程;很多面试者大体知道这个流程,但是有关细节不是特别清楚 。如果在消息发送阶段没有找到方法,iOS会走消息转发流程,流程图如下所示:1)动态消息解析 。检查是否重写了resolveInstanceMethod 方法,如果返回YES则可以通过class_addMethod 动态添加方法来处理消息,否则走第2)步;2)消息target转发 。forwardingTargetForSelector 用于指定哪个对象来响应消息 。如果返回nil 则走第3)步;3)消息转发 。这步调用 methodSignatureForSelector 进行方法签名,这可以将函数的参数类型和返回值封装 。如果返回 nil 执行第四步;否则返回 methodSignature,则进入 forwardInvocation ,在这里可以修改实现方法,修改响应对象等,如果方法调用成功,则结束 。否则执行第4)步;4)报错 unrecognized selector sent to instance 。很多人知道这四步,但是笔者一般会问:+load在main函数之前被Runtime调用,+initialize 方法是在类或它的子类收到第一条消息之前被调用的 , 这里所指的消息包括实例方法和类方法的调用 。笔者在面试过程中发现很多人对于load与initialize在分类、继承链的调用顺序不清楚 。对怎么保证初始化安全也不清楚RunLoop苹果原理图图中展现了 Runloop 在线程中的作用:从 input source 和 timer source 接受事件,然后在线程中处理事件 。两个都是 Runloop 事件的来源,其中 Input Source 又可以分为三类因为定时器默认是运行在NSDefaultRunLoopMode,在列表滚动时候,主线程会切换到UITrackingRunLoopMode,导致定时器回调得不到执行 。有两种解决方案:iOS 检测到手指触摸 (Touch) 操作时会将其打包成一个 UIEvent 对象,并放入当前活动Application的事件队列,UIApplication 会从事件队列中取出触摸事件并传递给单例的 UIWindow 来处理,UIWindow 对象首先会使用 hitTest:withEvent:方法寻找此次Touch操作初始点所在的视图(View),即需要将触摸事件传递给其处理的视图,这个过程称之为 hit-test view 。hitTest:withEvent:方法的处理流程如下:iOS的事件分发机制是为了找到第一响应者,事件的处理机制叫做响应者链原理 。所有事件响应的类都是 UIResponder 的子类,响应者链是一个由不同对象组成的层次结构,其中的每个对象将依次获得响应事件消息的机会 。当发生事件时,事件首先被发送给第一响应者,第一响应者往往是事件发生的视图,也就是用户触摸屏幕的地方 。事件将沿着响应者链一直向下传递 , 直到被接受并做出处理 。一般来说,第一响应者是个视图对象或者其子类对象,当其被触摸后事件被交由它处理,如果它不处理 , 就传递给它的父视图(superview)对象(如果存在)处理,如果没有父视图,事件就会被传递给它的视图控制器对象 ViewController(如果存在) , 接下来会沿着顶层视图(top view)到窗口(UIWindow 对象)再到程序(UIApplication 对象) 。如果整个过程都没有响应这个事件 , 该事件就被丢弃 。一般情况下,在响应者链中只要由对象处理事件,事件就停止传递 。一个典型的事件响应路线如下:First Responser --> 父视图-->The Window --> The Application --> nil(丢弃)我们可以通过 [responder nextResponder] 找到当前 responder 的下一个 responder,持续这个过程到最后会找到 UIApplication 对象 。1) 在VC的cellForRowAtIndexPath方法中cell的block直接引用self或者直接以_形式引用属性造成循环引用 。解决方案:把self改成weakSelf;2)在cell的block中直接引用VC的成员变量造成循环引用 。解决方案有两种:3)delegate属性声明为strong , 造成循环引用 。解决方案:delegate声明为weak4)在block里面调用super,造成循环引用 。解决方案,封装goback调用5)block声明为strong解决方案:声明为copy6)NSTimer使用后不invalidate造成循环引用 。解决方案:考察viewDidLoad、viewWillAppear、ViewDidAppear等方法的执行顺序 。假设现在有一个 AViewController(简称 Avc) 和 BViewController (简称 Bvc),通过 navigationController 的push 实现 Avc 到 Bvc 的跳转,调用顺序如下:1、A viewDidLoad2、A viewWillAppear3、A viewDidAppear4、B viewDidLoad5、A viewWillDisappear6、B viewWillAppear7、A viewDidDisappear8、B viewDidAppear如果再从 Bvc 跳回 Avc,调用顺序如下:1、B viewWillDisappear2、A viewWillAppear3、B viewDidDisappear4、A viewDidAppear如果你正在跳槽或者正准备跳槽不妨动动小手,添加一下咱们的交流群 931542608 来获取一份详细的大厂面试资料为你的跳槽多添一份保障 。
3,苹果基本知识苹果拼音:píngguǒ解释:a.蔷薇科落叶乔木,叶椭圆形,有锯齿,花白微红,果实圆形,味甜,是普通的水果 。为世界四大水果之一 。b.这种植物的果实 。【ios 基础知识,关于苹果的一些基本常识】
4,iOS 基础知识点一、属性修饰符读写属性: (readwrite/readonly)语义特性:(内存有关):(assign/retain/copy)原子特性:(和线程安全有关): (atomicit/nonatomic)readonly:只读,属性只会生成getter方法,不会生成setter.readwrite:既可读又可写.属性自动生成setter和getter方法.(默认的读写特性)getter= 方法名:指定生成getter方法时的方法名.setter= 方法名:指定生成setter方法时的方法名.assign: 默认类型,setter方法直接赋值,而不进行retain操作,也可以只针对对象,只是做简单的赋值操作. 默认的语义特性.retain: 针对于对象类型,setter方法对参数进行release旧值,再retain新值 。copy: setter方法进行Copy操作,与retain一样, 针对于对象类型,会拷贝一个新的对象,将新的对象的引用计数加1nonatomic: 禁止多线程,变量保护 , 提高性能atomic:原子特性,保证线程安全.系统默认的原子特性.weak:指针指向的地址一旦被释放,这些指针都将被赋值为nil 。这样的好处能有效的防止野指针 。消除循环引用。二、 @dynamic 关键字@dynamic dynamicStr; // 告诉编译器,不自定生成getter和setter方法,避免编译期间产生警告,然后由自己实现存取方法 。三、 @synthesize 关键字@synthesizestrongStr = _strongStr; // 可以定义 与变量名不相同的getter和setter的命名,籍此来保护变量不会被不恰当的访问, 编译器期间,让编译器自动生成getter/setter方法 当有自定义的存或取方法时 , 自定义会屏蔽自动生成该方法四、重定义setter方法getter方法// 重定义setter方法// 重定义getter方法五、不可变字符串 NSString// 运行log日志:2021-03-11 17:30:08.112340+0800 TestObject-C[93449:1623723] temp1: 不可变字符串, 0x10df9e7782021-03-11 17:30:08.112529+0800 TestObject-C[93449:1623723] str: 不可变字符串, 0x10df9e7782021-03-11 17:30:08.112610+0800 TestObject-C****[****93449:1623723****]**** strongStr: ****不可变字符串****, 0x10df9e778六、可变字符串 NSMutableString//一、将不可变字符串赋值给可变字符串对象 。//赋值可变字符串对象后,对象仍然是不可变对象2021-03-11 17:30:08.114159+0800 TestObject-C[93449:1623723] mTemp:不可变字符串1, 0x10df9e8782021-03-11 17:30:08.114393+0800 TestObject-C[93449:1623723] mCopyStr:不可变字符串1, 0x10df9e8782021-03-11 17:30:08.114697+0800 TestObject-C****[****93449:1623723****]**** mStrongStr:不可变字符串****1, 0x10df9e878//一、将可变字符串赋值给可变字符串对象 。2021-03-11 19:38:34.493763+0800 TestObject-C[95274:1718783] mTemp2: 可变字符串2, 0x600002710ea0, __NSCFString2021-03-11 19:38:34.493923+0800 TestObject-C[95274:1718783] mCopyStr: 可变字符串2, 0x6000027110e0, __NSCFString2021-03-11 19:38:34.494037+0800 TestObject-C****[****95274:1718783****]**** mStrongStr: ****可变字符串****2, 0x600002710ea0, __NSCFString2021-03-11 19:38:34.494422+0800 TestObject-C[95274:1718783] mTemp2: 可变字符串211, 0x600002710ea0, __NSCFString2021-03-11 19:38:34.494697+0800 TestObject-C[95274:1718783] mCopyStr: 可变字符串2, 0x6000027110e0, __NSCFString2021-03-11 19:38:34.494903+0800 TestObject-C****[****95274:1718783****]**** mStrongStr: ****可变字符串****211, 0x600002710ea0, __NSCFString七、富文本字符串 NSMutableAttributedString2021-03-11 19:34:52.041131+0800 TestObject-C[95207:1715249] attriStr: 我是富文本我是富文本我是富文本我是富文本, 0x600000a5bc00, NSConcreteMutableAttributedString2021-03-11 19:34:52.041307+0800 TestObject-C[95207:1715249] mutableAttri: 我是富文本我是富文本我是富文本我是富文本, 0x600000a5be40, NSConcreteAttributedString2021-03-11 19:34:52.041425+0800 TestObject-C****[****95207:1715249****]**** mutableStrongAttri: ****我是富文本我是富文本我是富文本我是富文本****, 0x600000a5bc00, NSConcreteMutableAttributedString2021-03-11 19:34:52.041943+0800 TestObject-C[95207:1715249] attriStr: 我是富文本我是富文本我是富文本我是富文本---我是新添加的, 0x600000a5bc00, NSConcreteMutableAttributedString2021-03-11 19:34:52.042281+0800 TestObject-C****[****95207:1715249****]**** mutableStrongAttri: ****我是富文本我是富文本我是富文本我是富文本****---****我是新添加的****, 0x600000a5bc00, NSConcreteMutableAttributedString八、不可变数组NSArray//一、 不可变数组赋值NSArray的对象2021-03-11 19:04:42.636207+0800 TestObject-C[94739:1689350] arr: (1, 2,3), 0x600001d5c8d02021-03-11 19:04:42.636411+0800 TestObject-C[94739:1689350] persons: ( 1,2, 3), 0x600001d5c8d02021-03-11 19:04:42.636538+0800 TestObject-C[94739:1689350] students: (1, 2, 3), 0x600001d5c8d02021-03-11 19:04:42.636646+0800 TestObject-C[94739:1689350] arr: (1, 2, 3), 0x600001d5c8d02021-03-11 19:04:42.636767+0800 TestObject-C[94739:1689350] students: (1, 2,3), 0x600001d5c8d0, __NSArrayI// 二、不可变数组赋值给NSMutableArray的对象**2021-03-11 19:15:59.046728+0800 TestObject-C[94934:1699039] arr: (1,2,3), 0x600002f6c0002021-03-11 19:15:59.046878+0800 TestObject-C[94934:1699039] cars: (1, 2,3), 0x600002f6c000, __NSArrayI2021-03-11 19:15:59.046982+0800 TestObject-C[94934:1699039] dogs: (1,2,3), 0x600002f6c000, __NSArrayI九、可变数组 NSMutableArray2021-03-11 19:22:39.183745+0800 TestObject-C[95044:1705082] arr2: (2,4,10,12), 0x600000fefea02021-03-11 19:22:39.184067+0800 TestObject-C[95044:1705082] cars: (2,4,10), 0x600000fef240, __NSArrayI**2021-03-11 19:22:39.184272+0800 TestObject-C[95044:1705082] dogs: (2,4,10,12), 0x600000fefea0, __NSArrayM十、不可变字典 NSDictionary// 不可变数组赋值给NSDictionary对象2021-03-11 19:25:32.789615+0800 TestObject-C[95102:1708378] dic:2021-03-11 19:25:32.789801+0800 TestObject-C[95102:1708378] personDic:2021-03-11 19:25:32.789919+0800 TestObject-C[95102:1708378] studentDic:十一、可变字典 NSMutableDictionary2021-03-11 19:59:28.739545+0800 TestObject-C[96373:1735182] mDic:**2021-03-11 19:59:28.740177+0800 TestObject-C[96373:1735182] carDic:2021-03-11 19:59:28.740359+0800 TestObject-C[96373:1735182] dogDic:2021-03-11 20:05:24.028840+0800 TestObject-C[96469:1740141] mDic:2021-03-11 20:05:24.028930+0800 TestObject-C[96469:1740141] carDic:2021-03-11 20:05:24.029028+0800 TestObject-C[96469:1740141] dogDic:十二、不可变集合 NSSet// 一、不可变NSSet赋值给 NSSet对象2021-03-11 20:09:49.418694+0800 TestObject-C[96545:1744249] set:2021-03-11 20:09:49.418826+0800 TestObject-C[96545:1744249] personSet:2021-03-11 20:09:49.418914+0800 TestObject-C[96545:1744249] studentSet:// 二、不可变NSSet赋值给 NSMutableSet对象2021-03-11 20:09:49.419281+0800 TestObject-C[96545:1744249] carSet:2021-03-11 20:09:49.419362+0800 TestObject-C[96545:1744249] dogSet:十三、可变集合 NSMutableSet2021-03-11 20:18:06.896997+0800 TestObject-C[96705:1752827] mSet:2021-03-11 20:18:06.897218+0800 TestObject-C[96705:1752827] carSet:2021-03-11 20:18:06.897340+0800 TestObject-C[96705:1752827] dogSet:5,ios开发 需要哪些知识 知乎面向对象的知识(有Java或者c#开发经验会更好),c语言基础比如:指针等,objective-c 基础知识,Cocoa-touch架构,后面就是多钻研目前最流行开发ios的编程语言就是c# 。另外开发ios需要很好的英语能力来阅读英文的api文档 。6,ios面试官最关心的问题是什么我只能说本人面相不咋地不一定啊,我目前工作的这家 , 问的我的都是些c++,windows消息我曾经做过的 。对于应聘的ios岗位,没问 。有点旁敲侧击的感觉 。如果是没经验的 , 在乎你的语言基础如果你有经验,主要问项目经验如果你是大牛,问架构如果你是竞聘老板,主要是问行业趋势、前景看是否吃苦耐劳 , 是否好沟通主要是相面吧就我个人而言:1.对一年以下工作经验的(一)人品如果人品不好,直接玩完(二)踏不踏实如果说话,做事特别浮躁,直接玩完(三)学习能力,能不能吃苦(四)iOS基础知识扎不扎实(五)iOS技术怎么样
推荐阅读
- 安卓开发可以用c语言吗,android应用能用c语言编写吗
- 安卓遥控mac,mac版wps如何使用远控操作?
- 安卓破解版游戏盒子,有没有安卓破解游戏盒子除了爱吾游戏盒子还有葫芦侠之外有没有比
- 手机编程怎么用函数,华为手机计算器怎么用函数
- 电动汽车小型,想买一辆微型新能源电动汽车什么牌子的比较好
- 如何打开app,怎样打开该APP
- 安卓应用编程软件破解版免费,谁有小土豆编程软件破解的
- 设计logo用什么软件,logo设计用的是什么软件
- ev3 education,帮我分析这句英语