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]来取得你自定义的字体了。

    iPhone开发常问的十个问题的更多相关文章

    1. Linux 面试最常问的十个问题

      如果你要去面试一个Linux系统运维工程师的职位,下面这十个最常见的问题一定要会,否则你的面试可能就危险了.这些都是比较基本的问题,大家要理解,不能光死记硬背. 1.如何查看系统内核的版本 这里有两种 ...

    2. 点击每个li输出里面的内容(前端很常问的面试题之一)

      点击每个li输出里面的内容(前端很常问的面试题之一) 前端 面试 JavaScript <!DOCTYPE html> <html lang="en"> & ...

    3. iOS:iPad和iPhone开发的异同(UIPopoverController、UISplitViewController)

      iPad和iPhone开发的异同 1.iPhone和iPad: niPhone是手机,iPad.iPad Mini是平板电脑 iPhone和iPad开发的区别 屏幕的尺寸 \分辨率 UI元素的排布 \ ...

    4. (转)大厂常问到的14个Java面试题

      1. synchronized和reentrantlock异同 相同点 都实现了多线程同步和内存可见性语义 都是可重入锁 不同点 实现机制不同 synchronized通过java对象头锁标记和Mon ...

    5. 企业面试题|最常问的MySQL面试题集合(二)

      MySQL的关联查询语句 六种关联查询 交叉连接(CROSS JOIN) 内连接(INNER JOIN) 外连接(LEFT JOIN/RIGHT JOIN) 联合查询(UNION与UNION ALL) ...

    6. 企业面试题|最常问的MySQL面试题集合(一)

      问题1:char.varchar的区别是什么?varchar是变长而char的长度是固定的.如果你的内容是固定大小的,你会得到更好的性能. 问题2: TRUNCATE和DELETE的区别是什么?DEL ...

    7. Selenium(Webdriver)自动化测试常问问题

      http://blog.sina.com.cn/s/blog_c189e2590102w3bv.html Selenium(Webdriver)自动化测试常问问题 (1)selenium中如何保证操作 ...

    8. 常问的MySQL面试题集合

      关注「开源Linux」,选择"设为星标" 回复「学习」,有我为您特别筛选的学习资料~ 除了基础题部分,本文还收集整理的MySQL面试题还包括如下知识点或题型: MySQL高性能索引 ...

    9. iPhone开发与cocos2d 经验谈

      转CSDN jilongliang : 首先,对于一个完全没有mac开发经验,甚至从没摸过苹果系统的开发人员来说,首先就是要熟悉apple的那一套开发框架(含开发环境IDE.开发框架uikit,还有开 ...

    随机推荐

    1. jQuery backgroundColor的animate效果

      我们知道jQuery几乎是我们最常用的javascript库了,不过尽管他自己本身拥有大量的特效,但却仍然缺少一些动画效果.比如说,颜色.背景颜色的变换. animate一般只支持大小,位置,透明度的 ...

    2. 桐桐的贸易--WA

      问题 A: 桐桐的贸易 时间限制: 1 Sec  内存限制: 64 MB提交: 15  解决: 2[提交][状态][讨论版] 题目描述 桐桐家在Allianceance城,好友ROBIN家在Horde ...

    3. springJDBC一对多关系,以及Java递归,jsp递归的实现

      maven编译,springMVC+spring+springJDBC框架. 要实现的功能是一个文件夹下,可能显示n个文件夹,每个文件夹下又可能显示n个文件夹.... 前台效果:

    4. UVALive 7269 Snake Carpet (构造)

      题目:传送门. 题意:构造出一个矩阵,使得矩阵含有n条蛇,每条蛇的长度是1到n,并且奇数长度的蛇有奇数个拐弯,偶数长度 的蛇有偶数个拐弯. 奇数和偶数分开构造,奇数可以是: 1357 3357 555 ...

    5. Fence Repair(poj 3253)

      题意: 有一个农夫要把一个木板钜成几块给定长度的小木板,每次锯都要收取一定费用,这个费用就是当前锯的这个木版的长度 给定各个要求的小木板的长度,及小木板的个数n,求最小费用 提示: 以 3 5 8 5 ...

    6. operator new与new operator的区别

      原文地址:http://www.cnblogs.com/jamesmile/archive/2010/04/17/1714311.html,在此感谢 C++中的operator new与new ope ...

    7. Diskpart命令安装系统小结

      <diskpart命令安装系统小结> 今天给同学安装系统,win8改win7.同学是预装了win8的联想y480,分区表采用的是GPT格式,捣鼓了半天才知道.GPT格式是新式的分区格式,相 ...

    8. C#控制管理VisualSVN Server

      VisualSVN Server可以用WMI接口管理(Windows Management Instrumentation). VisualSVN Server安装的计算机中,位于%VISUALSVN ...

    9. poj 2635 千进制

      转自:http://www.cnblogs.com/kuangbin/archive/2012/04/01/2429463.html 大致题意: 给定一个大数K,K是两个大素数的乘积的值. 再给定一个 ...

    10. cookie 暂时保存内容与恢复

      <script type="text/javascript"> $(function(){ $('.ycb_anniu').click(function(){ $.co ...