iOS基础知识,关于苹果的一些基本常识

1,关于苹果的一些基本常识设置~通用~往下拉~密码锁定…至于删除软件,按住软件图标使其抖动,点右上角的红色叉叉…【iOS基础知识,关于苹果的一些基本常识】
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.这种植物的果实 。
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,关于iphone的基础知识1.首先先回答你关于价格的问题 , 港行的最新官方价格出来了,3gS也有了港版,也就是货源最稳定的无锁版$,价格分别是16G 5388/ 8G 6288(HK$),换算成rmb,一个4800,一个5500左右,再看看现在3G的价格,你会不会觉得3GS可以接受了呢? 2.关于区别,3GS和3G区别还是很大的,最主要的是流畅度和软件问题,3GS的256mb内存可以保证软件基本上不会崩溃 , 用iphone的都知道,玩久了之后就要注销或者重启或者清楚下内存,就是因为128mb内存里系统占了90mb左右 , 所以很容易因为内存不足崩溃 。而且3GScpu也升级了,达到45nm级 , 但还不是双核——,综合测试下,性能提升1倍有余 。所以3GS性能非常不错 3.3.0版本可以玩大多数3.0以下的游戏,但是要注意的是有些非官方的软件就暂时不兼容了,比如说weifit输入法这类的 。4.自己进行破解越狱当然没问题 。但是需要有耐心,按照教程一步一步,每个人都可以做到的~如果还有问题可以短信我6,ios的简介互联网操作系统(Internetwork Operating System , 简称IOS)是思科公司为其网络设备开发的操作维护系统 。用户通过命令运行人机界面对网络设备进行功能设置,提供的功能大致为以下几点:网络设备及连接端口的功能首选项设置、运行网络协议与网络功能设备之间数据传输安全管理设置 。Cisco的网际操作系统(Internet work Operating System)是一个为网际互连优化的复杂的操作系统--类似一个局域操作系统(NOS)、如Novell的NetWare,为LANs而进行优化 。IOS为长时间经济有效地维护一个互联网络提供一个统一的规则 。简而言之,它是一个与硬件分离的软件体系结构,随着网络技术的不断发展,可动态地升级以适应不断变化的技术(硬件和软件) 。IOS可以被视作一个网际互连中枢:一个高度智能的管理员,负责管理的控制复杂的分布式网络资源的功能 。模块性IOS是Cisco路由软件的初始品牌名称 。随着Cisco技术的发展 , IOS不断扩展 , 成为Cisco Central ENgineering(中央工程部门)所称之为的“一系列紧密连接的网际互连软件产品” 。尽管在其品牌名识别中,IOS可能仍然等同于路由软件 , 但是它的持续发展已使之过渡到支持局域网和ATM交换机,并为网络管理应用提供重要的代理功能 。必须强调的是,IOS是Cisco开发的技术:一项企业资产 。它给公司提供独特的市场竞争优势 。目前许多竞争者许可IOS在其集线器和路由模块内运行 , IOS已经广泛成为网际互连软件事实上的工业标准 。开发历史模块化到多连接子系统结合下图介绍了IOS从一个统一的操作系统到目前高度模块化操作系统的发展历程 。统一的IOS的早期版本是一个单独系统,基本上以路由器为中心 。它被排列成一个过程(Procedure)集,允许任何过程之间相互呼叫 。这种单一的结构使数据的隐蔽性和独立性不强;它的大多数操作代码拥有结构和操作的相关性 。模块化IOS Releases 9.21到11.2反映了将IOS重新设计成模块化组件或子系统的努力 。每一个子系统被组织成一个层集(set of layers) , 提供一个进入系统代码的独立入口点 。子系统本身被定义为独立的模块,支持嵌入式(核心)系统的各种功能 。这种分层的子系统设计允许工程人员将IOS划分成更可管理和更易于升级的特性集 。终极目标IOS向可移植化的发展表明,IOS 11.3及更高版本更易于移植到新的平台 。bulleproofing最终的目标是将IOS发展为静态的更为高级的模块化结构,它允许单独定义IOS特性而与其它特性(或子系统)不相关 。Cisco可根据客户的特定需求建立IOS特性/解决方案集 。随着IOS继续发展,客户将能够和匹配专门的IOS特性,来满足其特定环境的要求 。模块化到多链接子系统结合优点特性灵活性基于Cisco产品的工程开发以用户可以获得适应变化的灵活性 。IOS软件提供一个可扩展的平台,Cisco会随着需求和技术的发展集成新的功能 。Cisco可以更快地将新产品投向市?。颐堑目突Э梢韵碛谜庵钟攀?。可伸缩性IOS遍布网际互连市?。还惴旱腃isco使用伙伴及竞争者在他们的产品上支持IOS 。IOS软件体系结构还允许其集成构造企业互联网络的所有部分 。Cisco已经定义了4个:核心/中枢:网络中枢和WAN服务,包括大型骨干网络路由器和ATM交换机 。工作组:从共享型局域网移植到局域网交换(VLANs)提供更优的网络分段和性能 。)远程访问:远程局域网连接解决方案;边际路由器、调制解调器等 。IBM网际互连:SNA和LAN并行集成,从SNA转换到IP 。Cisco的IOS扩展了所有这些领域 , 提供了支持端到端网际互连的稳健性 。可操作性IOS提供最广泛的基于标准的物理和逻辑协议接口--超过业界任何其他供应商:从双绞线到光纤,从局域网到园区网到广域网 , Novell NetWare,UNIX,SNA以及其他许多接口 。即是说,一个围绕IOS建立的网络将支持非常广泛的应用 。而且 , Cisco还一直是一个业界标准先驱,是许多知名业界标准机构(例如IETF、ATM论坛等)的积极成员和支持者 。可管理性IOS是Cisco将嵌入式智能植入网络设备:管理界面,例如IOS诊断界面 , 以及智能网络应用的代理软件,允许用于临视和广泛的网络设备的故障 。随着Cisco转向智能代理和基于策略的自动化管理的大规模部署 , IOS将作为一个关键的技术组件 。投资保护(以及随时间推移降低拥有成本)IOS为客户提供信息基础设施的投资保护 。IOS今天支持的许多特性是大多数客户未来需要的特性 。随着一家公司的成长扩展到新的领地,随着兼并收购带来的基础机构复杂性以及协议转换或新流量模式的出现,IOS提供的体系结构能使机构灵活地应用变化和经济有效地进行扩展以满足新的需求 。IOS允许我们的客户迅速调节适应新的模式,更长时间地保持其信息基础机构投资;其结果是随时间推移提供投资保护和降低拥有成本 。

    推荐阅读