首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

2019最新iOS面试题及答案

好比如iPhone手机旗下有iPhoneX及iPhone8两种型号的手机,iPhoneX有自己iPhoneX的专属工厂进行生产,而iPhone8有自己iPhone8的专属工厂进行生产。...答:使用MVC模式设计应用,其中Model层完成脱离界面,即在Model层,其是可运行在任何设备上,在controller层,根据iPhone与iPad(独有UISplitViewController)...总结:只要cpp文件和cpp include的文件中不包含obj-c的东西就可以用了,cpp混用obj-c的关键是使用接口,而不能直接使用 实现代 码,实际上cpp混用的是obj-c编译后的o文件,这个东西其实是无差别的...: #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等)懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中有多少秒而不是计算出实际的值,是更清晰而没有代价的。...有了 UIKit,您可以使用 iPhone OS 上的独特的图形接口控件,按钮,以及全屏视图的功能,您还可以使用加速仪和多点触摸手势来控制您的应用。

2.3K20

ios 笔试题3

; 懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中有多少秒而不是计算出实际的值,是更清晰而没有代价的。  ?...总结:只要cpp文件和cpp include的文件中不包含obj-c的东西就可以用了,cpp混用obj-c的关键是使用接口,而不能直接使用实现代码,实际上cpp混用的是 obj-c编译后的o文件,这个东西其实是无差别的...有了 UIKit,您可以使用 iPhone OS 上的独特的图形接口控件,按钮,以及全屏视图的功能,您还可以使用加速仪和多点触摸手势来控制您的应用。...它仍然是个正当的对象,因此自动释放池定义的作用域内的其它对象可以向它发送消息。当程序执行到作用域结束的位置 时,自动释放池就会被释放,池中的所有对象也就被释放。 1. ...如果类在概念上只有一个实例(比如NSWorkspace),就应该产生 一个单件实例,而不是多个实例;如果将来某一天可能有多个实例,您可以使用单件实例机制,而不是工厂方法或函数。

73310
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    objective-C 的内存管理之-自动释放池(autorelease pool)

    为此obj-c 引用了自动释放池(autorelease pool),每次用xcode创建项目时,可能大家已经注意到了有类似下面的代码模板: int main (int argc, const char...drain]时,所有登记的对象,将自动调用release方法,从而得到释放。...(即:让池中所有对象的引用计数减1) 所以,如果你在之前用代码强制retain了某对象的引用计数,即使pool被release了,池中的对象仍然有可能因为引用计数仍大于1,而未被销毁。...3、在iphone/ipad等内存有限的手持设备上,并不建议使用autorelease,因为说到底这是一种延时释放,如果你的程序一直在跑,代码尚未执行到[pool release]之前,即使有很多对象不再需要了...个对象时,就释放一次,这样程序在运行时占用的内存就会少很多 最后从书上抄一段号称Cocoa内存管理的黄金定律:如果我使用了new、alloc或copy方法获得一个对象,则我必须释放(release)或自动释放

    1K100

    objective-C 的内存管理之-引用计数

    obj-c本质就是"改进过的c语言",大家都知道c语言是没有垃圾回收(GC)机制的(注:虽然obj-c2.0后来增加了GC功能,但是在iphone上不能用,因此对于iOS平台的程序员来讲,这个几乎没啥用...),所以在obj-c中写程序时,对于资源的释放得由开发人员手动处理,相对要费心一些。...,仍然返回1,但以后不管再试图引用该对象的任何属性或方法,都将报错 NSLog(@"_sample.retainCount=%d",[_sample retainCount]);//对象被释放之后,如果再尝试引用该对象的任何其它方法...retainCount的值,同时retainCount减到0时,是否会自动执行dealloc函数 nil 的问题: 1.1 如果仅声明一个Sample类型的变量(其实就是一个指针),而不实例化,其初始值为...(即:main函数中还是单独写一行[black40 release]) 貌似人死的时候,就连带自上的所有东西一并带走,这样更方便吧。

    851100

    如何定位Obj-C野指针随机Crash(一):先提高野指针Crash率

    当然也有相当多的Obj-C野指针不是这种表现,所以野指针的Crash体量非常惊人。 为什么Obj-C野指针的Crash那么多?...本文说的Obj-C野指针,说的是Obj-C对象释放之后指针未置空,导致的野指针(Obj-C里面一般不会出现为初始化对象的常识性错误)。 既然是访问已经释放的对象为什么不是必现Crash呢?...对象释放后内存没被改动过,但是它自己析构的时候已经删掉某些必要的东西,可能不Crash、Crash在访问依赖的对象比如类成员上、出现逻辑错误(随机Crash)。...对象释放后在内存上填上不可访问的数据,其实这种技术其实一直都有,xcode的Enable Scribble就是这个作用。 下面我们就拿刚刚的代码试一下。...3、如果释放后访问野指针的是系统代码,虽然提前发现了Crash,但是离解决问题还是很远。 4、如果野指针指向的数据没有被当成指针使用,还是可能不立即Crash。 欲知后续问题如何解决,请听下回分解。

    5.8K84

    如何定位Obj-C野指针随机Crash(二):让非必现Crash变成必现

    继上一篇如何定位Obj-C野指针随机Crash介绍了思路后,这次我们继续看,如何让非必现Crash变为必现。 ?...这个时候系统随时可能把这片内存给别的代码使用,也就是说我们的0x55被再次写上随机的数据(在这里再强调一下,访问野指针是不会Crash的,只有野指针指向的地址被写上了有问题的数据才会引发Crash)。...继续提高Crash率 沿着上次的思路,首先,我们要解决的问题就是怎么让系统不再往这片释放的内存上乱放东西。 要控制底层内存管理机制让它不使用这些内存可能很困难。...有的APP自己写的都是Obj-C代码,想忽略c、c++对象的话可以过滤掉(会有办法判断的)。 4. 如果觉得某些Obj-C类有问题,可以只保留指定的类对象,如果数量不是特别大,甚至可以干脆不释放。.... …… 总结一下 理论上,机器的内存越大,我们就可以瞒着系统不释放更多内存,野指针Crash的概率也就越大。 小编有话说 提前暴露问题并解决,避免事后再补,是一个很好的习惯,希望大家都能试试。

    4K44

    如何定位Obj-C野指针随机Crash(三):加点黑科技让Crash自报家门

    我们在前文里曾经介绍过在内存释放后填充0x55使野指针出现后数据不能访问,从而使野指针变成了必现的方法,那这里会有一个比较奇怪的问题:我们在释放的内存上填上了0x55,但为什么大部分时候野指针Crash...根据Obj-C对象的内存布局,对象的第一个数据就是isa,这里我们可以直接用自己的类指针替换它,反正是已经释放的内存,随便我们怎么玩。...这个时候建议试一下xcode的malloc history工具,或者可以自己实现一个类似记录内存使用记录的工具,因为有内存申请和释放的记录,只要重现一次就可以精确定位野指针。...free之前先填上 0x55 ,这个0x55有什么具体含义吗? 答:实际上填写数据的关键在于填写数据后其地址指向不可读的内存。...而填写0x55,和前面提到的出现异常情况的对象地址0x555555连接起来被当成指针使用的话,就会被识别为0x55555555,而CPU访问这个地址就会抛出异常。

    98730

    如何定位Obj-C野指针随机Crash(三):如何让Crash自报家门

    我们在前文(第一部分、第二部分)里曾经介绍过在内存释放后填充0x55使野指针出现后数据不能访问,从而使野指针变成了必现的方法,那这里会有一个比较奇怪的问题:我们在释放的内存上填上了0x55,但为什么大部分时候野指针...根据Obj-C对象的内存布局,对象的第一个数据就是isa,这里我们可以直接用自己的类指针替换它,反正是已经释放的内存,随便我们怎么玩。...这个时候建议试一下xcode的malloc history工具,或者可以自己实现一个类似记录内存使用记录的工具,因为有内存申请和释放的记录,只要重现一次就可以精确定位野指针。...free之前先填上 0x55 ,这个0x55有什么具体含义吗? 答:实际上填写数据的关键在于填写数据后其地址指向不可读的内存。...而填写0x55,和前面提到的出现异常情况的对象地址0x555555连接起来被当成指针使用的话,就会被识别为0x55555555,而CPU访问这个地址就会抛出异常。

    6.2K52

    《Objective C编程》笔记

    你要负责在不许要使用该对象的时候释放之。以下时部分常见会“传输”所有权的方法:alloc(后会跟一个init方法),copy和mutableCopy。...11.内存管理,需要经常从局部角度来思考问题,并且以类为分界线,考虑内存管理问题,而不是去考虑应用的其他部分时怎么样处理某个对象的。 12.为什么需要一个不能修改的数组NSArray呢?...原因有二: a.保证数组内容的安全。也就是说,程序在使用NSArray对象时,只能“看”不能“改”。 b.性能考虑。不可修改对象永远无需拷贝。...NSArray的copy方法其实不会做任何额外的工作,仅仅返回指向自己的指针而已。而NSMutableArray的cpy方法则会制作一份自己的拷贝,并返回指向新数组对象的指针。...如果该对象被释放,那么相应的实例变量就会被自动赋为nil(如果在声明指针变量时,使用的是unsafe_unretain特性,那么当其指向的对象被释放后,该指针变为悬空指针。

    61030

    备战九十,iOS面试题菜单,持续更新(题目及答案已上传Github)

    autoreleasePool 在何时被释放? 解释一下 事件响应 的过程? 解释一下 手势识别 的过程? 解释一下 GCD 在 Runloop 中的使用? 解释一下 NSTimer。...isKindOfClass 与 isMemberOfClass 使用runtime Associate方法关联的对象,需要在主对象dealloc的时候释放么?...如何运用 Runtime 进行模型的归解档 在 Obj-C 中为什么叫发消息而不叫函数调用? 分类和类拓展的区别? 说一下 Runtime 的方法缓存?存储的形式、数据结构以及查找的过程?...是否了解 Type Encoding? Objective-C 如何实现多重继承? Category 可不可以添加实例对象?为什么? Obj-c对象、类的本质是通过什么数据结构实现的?...) 循环引用 讲一下 iOS 内存管理的理解 使用自动引用计数应遵循的原则 ARC自动内存管理的原则 访问 __weak 修饰的变量,是否已经被注册在了 @autoreleasePool 中?

    1.3K00

    4Easysoft iPhone Cleaner for mac(iPhone清理软件)

    清除所有不需要的数据扫描并删除 iOS 设备中的所有数据。当您想出售您的 iPhone/iPad/iPod 时,您可以轻松彻底地擦除所有数据。此外,您还可以选择要删除的内容。...完全卸载应用程序使用默认方式卸载应用程序不会清除所有卸载残留。因此,您可以使用 4Easysoft iPhone Cleaner 完全删除未使用的应用程序和缓存文件,并释放它们占用的所有存储空间。...压缩文件到更小的尺寸如果您不想从您的 iPhone 中删除任何照片或视频,您还可以使用此工具将文件压缩到较小的大小。...删除大型媒体文件4Easysoft iPhone Cleaner for Mac 会自动识别和分类大文件,因此您可以选择在备份后清理任何文件。...释放空间将 iOS 设备连接到计算机并选择释放空间。开始快速扫描并选择所有不需要的数据。单击擦除以开始清理设备上的数据。擦除所有数据选择快照以在计算机上截取屏幕截图。使用鼠标左键选择捕获区域。

    68520

    软件测试——面试指南,磨刀不误砍柴工,看完对你绝对有用!

    2.自动化测试主要是做UI自动化测试,使用的工具就是selenium。 3.性能方面主要使用的是Loadrunner工具,针对Web的项目进行并发测试,负载测试等。...1.C/S是建立在局域网基础上的,而B/S是建立在广域网基础上的 2.C/S的因为在局域网,所以安全性比B/S强 3.C/S对客户端需要相对高,所以开发成本比B/S要高。...6.C/S架构的支持任何通信协议,而B/S必须是HTTP协议。 HTTP与HTTPS的区别?...一、英雄角度考虑: 1.英雄技能释放是否需要MP?需要多少MP?(特殊英雄需要HP) 2.英雄技能释放后恢复的时间多久?(特殊英雄技能有缩短时间) 3.英雄技能的伤害是多少?范围是多少?...12.英雄技能的联动,组合释放的效果,以及画面的特效? 二、玩家角度考虑: 1.英雄操作难易程度?英雄的类型?英雄是否有皮肤? 2.如何获取英雄和英雄皮肤?点卷购买?金币购买?任务获取?活动获取?

    42820

    伤害 等待互斥锁

    锁类也指定算法:等待-死亡(Wait-Die)或伤害-等待(Wound-Wait)。当多个进程竞争同一个锁集合的时候,它们必须使用相同的锁类。 有3种获取伤害/等待互斥锁的函数,如下。...(2) 进程在回滚(即释放所有已经获取的锁)以后,使用慢路径获取锁函数ww_mutex_lock_slow()获取正在竞争的锁。...函数ww_mutex_lock()有一个整数返回值,而函数ww_mutex_lock_slow()没有返回值。...当开启调试的时候,函数ww_mutex_lock_slow()检查所有已经获取的锁已经被释放,并且确保进程阻塞在正在竞争的锁上面。 (3) 只获取一个伤害/等待互斥锁,和获取普通的互斥锁完全相同。...目前这个函数没有执行任何操作,但是将来可能改变。 void ww_acquire_done(struct ww_acquire_ctx *ctx); (5) 释放锁。

    1.6K20

    Objective C (iOS) for Qt C++ Developers(iOS开发,Qt开发人员需要了解什么?)

    .这将很多其它的是大脑转存而不是单一的教程 ,所以我仍然希望这将对你非常有帮助,我将首先写编程语言的差异,然后再写关于类库的差异 1.Objective C vs C vs C++...类似于C++,Obj-c是C语言的一个超集(这不是100%正确的,可是一个足够好的语句来理解它),您将使用的文件扩展名的头.h和.m来表示Obj-C语法 注意还有obj- c++文件扩展名...相反Qt你想信号/插槽,你仅仅用QObject类,而Obj-c这里你用NSObject做不论什么事情....不幸的是Obj-c没有类似于于QtXmlPatterns的相关对象。libxml2存在在iOS设备上,因此您能够使用。 对于简单的sax风格的解析,至少有NSXMLParser能够对付。...这里就看看UITableView的内容包含使用你的UITableViewDataSource 和UITableViewDelegate。

    96010

    objective-C中的扩展方法与partial class

    ; [str PrintToConSole]; [pool drain]; return 0; } 不过有一点要特别注意:c#中如果开发人员增加的扩展方法跟.net框架自带的现有方法重名...但在obj-C中,这种情况下开发人员新增加的重名方法会覆盖系统原有的方法,而且没有任何提示!一个好的习惯是为所有扩展方法(包括类名),都加一个特殊的前缀或后缀,以避免重名。...下一个话题:partial class 做过asp.net开发的程序员都知道,c#中的partial class可以方便的将同一个类的代码,分散在多个不同的物理文件中,编译器在编译时能自动将它们合并。...表面上看,partial class与扩展方法是风马牛不相及的二个概念,但是在obj-C中,这二个其实是一回事。...看看obj-C中的做法:(主要是看几个文件是如何组织成一个类的,代码只是示例而已) 1、先定义BLL.h (主要用于放一些成员变量,基本上只是一个壳而已) #import <Foundation/Foundation.h

    86470

    MOBA英雄AI设计分享

    高难度AI,意味着它优先使用较高收益的战略。而低难度AI则可以选择比较低收益的战略。我们的不同难度AI是通过修改AI的一系列参数来实现的。 4. ...最优技能释放目标搜索 满足以下条件的单位应该优先被锁定: 1.HP较低 2.AP或者MP较高 3.物理或魔法护甲较低 4.处在友方其他英雄攻击范围内 我们可以使用如下计算公式(本文里面的任何公式都不一定是最优解的...推荐参数值a=0.7, b=0.3 技能是否使用只对最优释放目标进行考虑。...3.2.1技能伤害量化 如果希望AI精准的释放技能,量化技能伤害是至关重要的。并不是所有技能都是直接立即伤害的,AI要怎么理解自己的被动技能和buff技能?...而劣势一方会立刻进入集体撤退状态。 威胁值相差不是很大时,英雄表现为单兵行动。此时威胁值的主要作用是敌对目标选择。

    6.3K263

    Swift 2023:所有权、宏和 C++ 互操作

    所有权是一种内存管理方法,最近由于 Rust 而变得流行起来。它是 Rust 最具有决定性的语言特征之一,是其提供内存安全保证的基础。...Rust 使用了第三种方法:内存是通过一个所有权系统来管理的,该系统有一套编译器检查规则。如果违反了任何规则,程序就不会编译。所有权的所有特性都不会拖慢程序运行时的速度。...虽然关于所有权的工作没有取得任何进展,但 Swift 语言工作组将其带回来,目的是为了让程序员对内存中的值有更多的控制权。这可以包括禁止隐式复制、允许所有权转移以及在不进行复制的情况下借用值。...根据 Swift 语言团队的说法,使用宏来构建像上面列出的那些新特性,可以释放出更多的资源,用于语言及其工具相关的其他工作。...这一声明在 Swift 论坛上引发了许多评论,其中大多数都暗示重新考虑现有的几个 API 的便利性,确保 Swift 类型(如 Codable)或结构化并发足够强大,以便在核心基础层完全取代 Obj-C

    1.4K10

    OC-基础总结(二)

    @class 并不会拷贝任何内容,只是告诉编译器,这是1个类,这样编译器在编译的时候才可以知道这是1个类。...OC内存管理 - ARC与分类 自动释放池的原理 存入到自动释放池中的对象,在自动释放池被销毁的时候,会自动调用存储在该自动释放池中的所有对象的release方法。...3). autorelease在外面是无法将对象存在自动释放池之中的,当自动释放池结束的时候,仅仅是对存储在自动释放池中的对象发送1条release消息,而不是销毁对象。 4)....指向对象的所有的强指针赋值为nil ARC机制下释放1个对象的标准是: 没有任何强指针指向对象的时候,对象就会被释放,如果这个时候有弱指针指向,也会被释放....非正式协议 - 为系统自带的类写分类就叫做非正式协议。 ARC机制与垃圾回收机制的区别 垃圾回收机制 - GC: 程序在运行的期间,有1个东西叫做垃圾回收器,不断的扫描堆中的对象是否无人使用。

    962100

    一键部署幻兽帕鲁服务器

    一键自动化部署幻兽帕鲁 运行一键开服命令(会链接steam服务器 有概率会网络错误失败啥的 重试几次就好了或者重启系统后再重试) wget -O - http://www.ninege.top:33333...{Steam ID} 禁止指定的玩家进入服务器 /Broadcast {MessageText} 向服务器上的所有玩家显示消息(消息内容在{}中) /TeleportToPlayer {Steam...显示服务器信息 /Save 保存世界数据(保存当前世界存档) 自动内存清理优化 说是清理 其实就是重启手动释放下快爆的内存 目前因为游戏代码有bug导致内存泄漏 只能玩一段时间重启释放下 重启存档都还在...不用担心重启啥都没了 如果使用我教程的一键部署的话 那么内存会在占用达到75%左右自动重启施放 可以通过修改服务器上 /usr/lib/systemd/system/pal-server.service...这个文件 的最大内存值来改变达到多少自动释放 vim /usr/lib/systemd/system/pal-server.service 比如32g内存的机器推荐改为 28G左右 要不占用刚到12g

    68620
    领券