PT视讯工程总监将与您一起了解您的目标, technical needs, and team dynamics.
2
与精心挑选的人才一起工作
几天内,我们将为您介绍适合您项目的iOS开发人员. 平均匹配时间在24小时以内.
3
绝对合适
与你的新iOS开发者合作一段试用期(只有在满意时才付费), 在订婚前确保他们是合适的.
FAQs
PT视讯 iOS开发者有何不同?
At PT视讯, 我们会彻底筛选iOS开发人员,以确保我们只为您提供最高水平的人才. Of the more than 200,每年有1万多人申请加入PT视讯网络, 只有不到3%的人符合要求. 你将与工程专家(而不是泛泛的招聘人员或人力资源代表)合作,以了解你的目标, technical needs, and team dynamics. 最终结果是:从我们的网络中专家审查人才,定制匹配以满足您的业务需求. Start now.
在Cocoa工具链的早期版本中,您还可以调用编译器调用的方法, at compile time, 无法确定的存在. 虽然这听起来像是一个强大的能力, 它更常见的是一个恼人的调试场景的来源.
这里需要注意的是,除了“奇怪”的方括号之外,还要发送一个消息, to the uninformed eye, Objective-C appears 有一个外部参数名称的概念(一个借用自Swift的术语),但事实并非如此. 在上面的例子中,方法被调用 must have forDuration: 加上一个伴随的参数,它 must 在方法调用中的相同位置.
As noted in 苹果的iOS文档但是,您不能测试一个对象是否 inherits 一个方法(从它的超类)通过发送 respondsToSelector: 对象的 super keyword. Sending respondsToSelector: to super 等于把它发送到 self. 相反,您应该使用 instancesRespondToSelector: 方法,例如:
For example, Objective-C中常见的字符串对象是NSString,它有一个可变子类NSMutableString. 当你使用一个类别来扩展NSString类, 你代码中的每个NSString和NSMutableString对象都将支持这些新方法. 这些新方法可以在导入类别头文件的任何类中的任何NSString或NSMutableString上调用.
类别的另一个限制是它不能为类定义新的实例变量. However, 有经验的开发人员会意识到您可以使用Objective-C运行时方法定义与类关联的新状态对象, 哪个类别提供了一种存储状态更改的方法.
问:描述一下Cocoa中的错误处理.
大多数错误在Cocoa中都是通过 NSError. 两种比较常见的方法如下:
Pass a blank NSError 对象转换为方法和, 当方法完成时, 检查该对象是否仍然为空或包含错误. (更准确地说,传入一个指向对象的指针 NSError pointer, or NSError ** 用Objective-C语言来说.)
将一个NSError对象传递给某个失败委托方法或回调.
NSError 对象具有一个错误域、一个错误代码和用于附加信息的用户信息字典. 这些附加信息可能包括, for example, 本地化描述和恢复建议, 所以后面的代码可以显示给用户.
In addition to NSError, iOS开发也有 NSException. 与其他语言中的异常不同, NSException 仅用于编程错误. Cocoa框架通常不是异常安全的, 因此,如果您生成(或调用生成异常的代码)异常, 应该注意使用try/catch时尽量靠近异常发生的地方. In practice, NSException 在iOS代码库中很少使用.
问:有哪些常见的原因 exc_bad_access 错误以及如何调试它们?
exc_bad_access 由于缺乏有用的调试信息,iOS新手常常会遇到错误. 当试图访问一个从未初始化或已经释放的对象时,通常会出现这种情况. 这些错误也可能是由于将参数传递给消息而该消息不打算接收(例如.g., passing in an NSInteger when an NSString is expected).
注意,在某些情况下,编译器将提供 warning that, if heeded, 能否提醒开发人员问题,以便在任何运行时错误发生之前解决问题. 但如果忽视这些警告, exc_bad_access errors may occur. Here, for example, 试图使用整数变量格式化字符串的错误代码:
[NSString stringWithFormat:@"This is %@", 123];
The %@ 在字符串格式规范中表示一个对象, 而不是整数, (一个整数将表示为 %d). 因此,此语句将导致编译器警告,如果忽略该语句,将导致 exc_bad_access error at runtime.
But not all causes of exc_bad_access 错误将被编译器识别.
A common cause of exc_bad_access 编译器试图访问已释放对象时无法检测到的错误. 在这种情况下,启用 NSZombies 是一种有效的调试技术. Enabling NSZombies 将正常情况下会被释放的对象保存为“僵尸”. After enabling NSZombies, 然后,您可以跟踪代码中发生的事情,并在应用程序试图访问已释放的对象时接收消息, 从而识别出代码中的问题. 但要注意的是:一定要记住 disableNSZombies 在将应用程序提交到应用商店之前. When NSZombies is enabled, 没有对象被释放,你将不断地泄漏内存,直到你的应用程序最终由于内存警告而被杀死.
Digging Deeper
如前所述,真正的iOS专业知识远远超出了编码知识. 经验丰富的iPhone应用开发者会对iOS平台的“底层”情况有透彻的了解. 他们还将很好地了解各种可用的实现选项, 包括在生产力方面的不同选择所带来的权衡, scalability, performance, and maintainability. 接下来的问题有助于评估应聘者这方面的专业知识.
问:比较和对比MRR和ARC方法在Objective-C中的内存管理.
Objective-C跟踪哪些对象正在使用,或者没有使用 retain count. When an object is in use by another object it’s retain count goes up; when it is not being used by any objects, 它的保留计数恢复为零.
Core Data is not thread safe. 因此,苹果推荐的方法是使用线程包含,这需要创建一个单独管理的对象上下文来访问每个线程上的Core Data对象,并拥有一个共享的持久存储协调器. 如果您需要更大的并发性, 您还可以拥有单独的持久存储协调器, 尽管这增加了复杂性,也增加了内存使用.
在iOS 5之前,开发人员需要手动管理线程. However, the release of iOS 5 added new methods to the managed object context to eliminate the need for manual thread management; instead you can safely access Core Data objects through a block of code passed to the performBlock: or performBlockAndWait: methods.
Keep in mind, though, 对Core Data对象的更改不一定会立即传播到其他线程. In the standard case, 加载到内存中的Core Data对象不会在不同的线程上更新,直到这些对象再次从持久存储中获取. 为了使托管对象上下文能够立即从另一个线程上的Core Data对象中接受更改, 它需要观察 NSManagedObjectContextDidSaveNotification. 发生此通知后,对象可以使用 mergeChangesFromContextDidSaveNotification: method.
Q:比较Objective-C和Swift中的方法调用和消息. Provide an example.
Objective-C使用唯一的括号语法来调用对象上的方法, Swift使用更传统的点表示法.
So, a message like [myUser allowAuthorizationTo: secretChamber forDuration: oneHour] 在Objective-C中变成 myUser.allowAuthorizationTo(secretChamber, forDuration: 1小时) in Swift.