iphone开发常问的十个问题

李洪强 李洪强     2022-08-07     299

关键词:

iPhone开发常问的十个问题

前言

今天去stackoverflow.com上看了一下iPhone标签下排名最高的10个问题,将它们整理出来,希望这些常见问题能帮到一些iPhone开发的初学者。本来想把答案也翻译过来的,后来发现答案资料通常都比较复杂,翻译起来太麻烦。所以大家还是看英文的答案吧,我只顺带用中文总结一下答案。

问题一: 有哪些iPhone开发和Objective-C的入门资料

这个确实是最常问的问题了。对于我个人来说,入门时所看的资料主要是《From C++ to Objective-c》和《iPhone开发基础教程》,另外,我也把stanford的iphone视频课程看完了,链接是:http://www.stanford.edu/class/cs193p/cgi-bin/index.php

个人体会是边学边做,上手会比较快。编程这东西,不自己上手做做,没感觉。另外,如果入门之后想提高的话,我觉得还是需要把苹果每年的WWDC视频都下载下来看看,里面讲的东西还是非常有用的, 链接是:http://developer.apple.com/WWDC/

问题二: 如何在Windows中进行iPhone开发

大家还是把Windows想太全能了。至少在开发这一块上,Windows对于程序员来说,还是相当不友好的。这一点在使用Mac系统后,差别一下子就体会到了。就比如说git,在Windows下使用就有很多问题。另外话说回来,Mac机也不是什么都好,在中国,Mac系统相关的国内软件相当少,Mac下的游戏也相对Windows少很多,如果你想用Mac机来娱乐的话,会比较受限制。

问题三: 有哪些基于iPhone的base64编码的库

从这个问题的答案中,我选了一个我个人觉得比较好用的Base64编码库,放到我的Xcode Tool中了。地址是:https://github.com/tangqiaoboy/xcode_tool/tree/master/Encoding

问题四: 如何判断当前iPhone是否联网

最佳的答案是用苹果提供的Reachability类。详细的使用方式大家自己看答案吧,写得很清楚。

问题五: 如何做一个快速并且轻量级的PDF阅读器

我暂时没这个需求,就没有详细看答案。

问题六: 如何让我的app支持打开一种格式的文件

在iPhone 3.2以上系统中,使用URL schemes即可完成这个需求。详细见答案。

问题七: 当键盘出现的时候,如何让UITextField自动上移

对于iPhone界面控件的操作应该算是开发中必备的能力。键盘出现的时候上移相关的控件算是常见的需求,但是从这么多人问这个问题就可以看出,还是有很多人对这些需求的实现方式有疑问。

对于这个问题,主要是通过增加对键盘出现和消失的相应的Notification,然后在键盘出现和消息的时候,通过设置相关控件的frame来实现。相关代码如下,来源自stackoverflow。

-(void)textFieldDidBeginEditing:(UITextField *)sender
{
if ([sender isEqual:_textField])
{
//move the main view, so that the keyboard does not hide it.
if (self.view.frame.origin.y >= 0)
{
[self setViewMovedUp:YES];
}
}
}

//method to move the view up/down whenever the keyboard is shown/dismissed
-(void)setViewMovedUp:(BOOL)movedUp
{
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.5]; // if you want to slide up the view

CGRect rect = self.view.frame;
if (movedUp)
{
// 1. move the view‘s origin up so that the text field that will be hidden come above the keyboard
// 2. increase the size of the view so that the area behind the keyboard is covered up.
rect.origin.y -= kOFFSET_FOR_KEYBOARD;
rect.size.height += kOFFSET_FOR_KEYBOARD;
}
else
{
// revert back to the normal state.
rect.origin.y += kOFFSET_FOR_KEYBOARD;
rect.size.height -= kOFFSET_FOR_KEYBOARD;
}
self.view.frame = rect;

[UIView commitAnimations];
}


- (void)keyboardWillShow:(NSNotification *)notif
{
//keyboard will be shown now. depending for which textfield is active, move up or move down the view appropriately

if ([_textField isFirstResponder] && self.view.frame.origin.y >= 0)
{
[self setViewMovedUp:YES];
}
else if (![_textField isFirstResponder] && self.view.frame.origin.y < 0)
{
[self setViewMovedUp:NO];
}
}


- (void)viewWillAppear:(BOOL)animated
{
// register for keyboard notifications
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:)
name:UIKeyboardWillShowNotification object:self.view.window];
}

- (void)viewWillDisappear:(BOOL)animated
{
// unregister for keyboard notifications while not visible.
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillShowNotification object:nil];
}

问题八: 有关UIImagePickerController, Image, Memory的问题和答案整理

这个其实是一个相关问题的汇总贴。其中对于UIImage的操作示例挺有用处。做iPhone开发,总是会遇到一些图象处理相关的东西,能够从这儿积累一些相应的知识,到真正自己需要的时候帮助就大了。

问题九: 如何对包含自定义元素类型的NSMutableArray排序

答案讨论了各种方法,下面是其中提到的最简单的方法:定义一个比较用的selector

- (NSComparisonResult)compare:(Person *)otherObject {
return [self.birthDate compare:otherObject.birthDate];
}

NSArray *sortedArray;
sortedArray = [drinkDetails sortedArrayUsingSelector:@selector(compare:)];

问题十: 如何在iPhone中使用自定义字体

答案讨论了在iOS3.2以前及以后的做法,现在都5.1了,估计支持3.2以前的app很少了吧。所以我把iOS3.2以后的办法附在下面。简单来说,就是iOS3.2苹果支持自定义字体,只需要在Info.plist文件中设置UIAppFonts相关的信息即可。步骤如下:

  1. 将自定义字体加到你的工程资源文件中
  2. 在 info.plist 文件中增加一名为 UIAppFonts 的key
  3. 将这个key修改成array
  4. 将你用到的所有字体的名字,作为这个array的值,一项一项填进去(包括扩展名)
  5. 保存 info.plist
  6. 现在就可以在代码中直接用[UIFont fontWithName:@”CustomFontName” size:12]来取得你自定义的字体了。

开发者关心的十个数据库技术问题

...新程序员002》经过用户、专家调研,收集汇总了十个开发者关心的数据库技术问题,并邀请腾讯云TDSQL技术负责人、首席架构师雷海林作出解答,希望为越来越多投身数据库的技术人才提供参考。数据技 查看详情

34.js开发者必须知道的十个es6新特性

JS开发者必须知道的十个ES6新特性这是为忙碌的开发者准备的ES6中最棒的十个特性(无特定顺序):默认参数模版表达式多行字符串拆包表达式改进的对象表达式箭头函数 =&>Promise块级作用域的let和const类模块化注意:这... 查看详情

本学期计划及其对构建之法的十个问题

...常工作中遇到的一些具体问题,内容覆盖了对于现代软件开发非常重要的基础知识。这套丛书展现了注重实效的实际技巧及工具使用方面的内容。     读完构建之法之后,我有十 查看详情

提高编码技能成为更好的开发者的十个提示

许多Java开发人员问我如何成为一个更好的程序员,如何提高我的编程技能,或者我擅长Java但在解决问题的技能上不那么好等等。这是现实,今天的时代充满了语言专家而不是真正的程序员。它易于理解Java编程语言的... 查看详情

业内人士告诉你,买流量卡之前必须要问清楚的十个问题!

...#xff0c;小编告诉大家,在办理流量卡什么问题是必须要问的。​下面进入正题,接下来介绍选购流量卡时,你必须问清楚的几个问题:1、是否是号卡,物联卡不要买,一定要买正规的 查看详情

业内人士告诉你,买流量卡之前必须要问清楚的十个问题!

...#xff0c;小编告诉大家,在办理流量卡什么问题是必须要问的。​下面进入正题,接下来介绍选购流量卡时,你必须问清楚的几个问题:1、是否是号卡,物联卡不要买,一定要买正规的 查看详情

2020年精心收集的十个java开发网站

...托管平台,一个拥有数十亿行代码的网站,每天有数百万开发者聚集在一起,研究开源软件中存 查看详情

javascript开发者都应该知道的十个概念

1.原始值和引用值(Valuevs.Reference)理解对象、数组和函数是如何复制和传递到函数中的。了解引用值是被复制了什么,理解原始值是通过复制值来进行复制和传递的。 2.域(Scope)理解全局域、函数域以及块级作用域之间的区别。... 查看详情

10个python面试常问的问题(代码片段)

...thon的职位需求越来越高。下面我收集了10个Python面试官经常问的问题,供大家参考学习。类继承有如下的一段代码:classA(object):defshow(self):print'baseshow'classB(A):defshow(self):print'derivedshow& 查看详情

2019年成为更好的java开发者的十个提示

...发来的电子邮件,要求我告诉他们如何成为更好的Java开发人员,他们应该学习什么,以及他们可以成为RockstarJava开发人员的工作领域和方向有哪些?在过去几年中单独回答之后,我想了几点,我认为这将... 查看详情

最常问的mysql面试题集合(代码片段)

问题1:char、varchar的区别是什么?varchar是变长而char的长度是固定的。如果你的内容是固定大小的,你会得到更好的性能。 问题2:TRUNCATE和DELETE的区别是什么?DELETE命令从一个表中删除某一行,或多行,TRUNCATE命令永久地从表... 查看详情

级数的十个重要公式

查看详情

编码器信号电缆与传输抗干扰的十个问题讨论!

>>>>>>>>>>>转自“伺服与运动控制”微信公众号<<<<<<<<<<<<<<<---->侵删。--------------------------------分割线---------------------------------- 查看详情

程序员最关心的十个问题,我帮你问了chatgpt

...,ChatGPT火爆了科技圈。我搜集筛选出了程序员最关心的十个问题。并将这些问题询问了ChatGPT,整理成了这篇文章。一起来看看ChatGPT的答案吧~Q1:AI是否有可能取代程序员?AI技术还没有发展到可以完全取代... 查看详情

程序员最关心的十个问题,我们帮你问了ai

...;我们面向工程师征集共创,并筛选出了程序员最关心的十个问题。并将这些问题询问了ChatGPT,整理成了这篇文章。一起来看看ChatGPT的答案吧& 查看详情

java岗大厂面试官常问的那些问题,面试突击版!

并发编程共享模型篇并发编程概览进程与线程Java线程共享模型之管程共享模型之内存共享模型之无锁共享模型之不可变共享模型之工具共享模型之管程原理之Monitor(锁)原理之伪共享模式篇—正确姿势同步模式之保护性智停同步... 查看详情

网工不得不掌握的十个技术问题

一、数据链路层有什么用?数据链路层,作为OSI第二层,里面包含的设备就是交换机,包含的协议通常是一些局域网和广域网协议,那些协议的定位是什么呢,就是当设备之间连线线连好之后,所组成的网络是一个什么样的架构... 查看详情

djangorestframework的十个组件

...页面,可以方便的测试自己的API。简单说一下这个工具包的十个功能:1.权限2.认证3.访问频率4.序列化(使用最多)5.路由6.视图7.分页器8.解析器9.渲染器10.版本 查看详情