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. MYSQL索引失效的各种情形总结

      1) 没有查询条件,或者查询条件没有建立索引  2) 在查询条件上没有使用引导列  3) 查询的数量是大表的大部分,应该是30%以上.  4) 索引本身失效 5) 查询条件使用函数在索引列上,或者对索 ...

    2. 1.7 逆序数与归并排序[inversion pairs by merge sort]

      [本文链接] http://www.cnblogs.com/hellogiser/p/inversion-pairs-by-merge-sort.html [题目] 编程之美1.7光影切割问题可以进一 ...

    3. 利用VMware虚拟机(Android-x86 2.2)和eclipse,调试安卓代码

      下载 android-x86-2.2-generic.iso (这里包含eth0)  http://www.android-x86.org/download XP32位 只能使用 VMware Wor ...

    4. Java for LeetCode 061 Rotate List

      Given a list, rotate the list to the right by k places, where k is non-negative. For example: Given ...

    5. poj 2739 Sum of Consecutive Prime Numbers 解题报告

      题目链接:http://poj.org/problem?id=2739 预处理出所有10001以内的素数,按照递增顺序存入数组prime[1...total].然后依次处理每个测试数据.采用双重循环计 ...

    6. Android Handler leak 分析及解决办法

      In Android, Handler classes should be static or leaks might occur, Messages enqueued on the applicat ...

    7. August 1st, 2016, Week 32nd Monday

      Laughing is the most touching mask. 笑容是最动人的面具. I used to be very weclome in those I had met. And the ...

    8. 工作空间项目不存在,eclipse中项目删不掉

      解决:E:\androidworkspaceall\.metadata\.plugins\org.eclipse.core.resources\.projects  ->删除对应项目

    9. C/C++函数参数读取顺序2

      #include <stdio.h>int main(){ int a=1,b=3,c=3; printf("%d, %d, %d",(a++,b++,c++),b,c ...

    10. grep -w

      [root@86 ~]# mysqladmin -uroot -p123456 -S /tmp/mysql.sock extended-status|grep -w "Com_update& ...