美文网首页Kevin的IOS开发专题
IOS开发问题索引(四)

IOS开发问题索引(四)

作者: Kevin_Junbaozi | 来源:发表于2018-02-26 22:56 被阅读31次

    全系列文章索引:

    IOS开发问题索引(一)

    IOS开发问题索引(二)

    IOS开发问题索引(三)

    IOS开发问题索引(四)

    IOS开发问题索引(五)

    IOS开发问题索引(六)

    IOS开发问题索引(七)

    IOS开发问题索引(八)

    IOS开发问题索引(九)


    1 Xcode利用宏区分模拟器与真机

    Xcode利用宏定义区分iphone模拟器和真机

    http://blog.csdn.net/zypsg/article/details/5524623

    #if TARGET_IPHONE_SIMULATOR

      label . text = @"iphoneSimulator" ;

    #elif TARGET_OS_IPHONE

    label . text = @"iphoneDevice" ;

    #endif

    2 IOS设备类型判断

    iOS判断设备类型

    http://blog.sina.com.cn/s/blog_9c3c519b01013gdx.html

    如何判断ios设备的类型(iphone,ipod,ipad)

    http://blog.csdn.net/tangaowen/article/details/6525992

    3 IOS中多版本,多设备类型支持注意事项

    IOS中多版本,多设备类型支持注意事项

    http://www.cnblogs.com/smileEvday/archive/2013/04/10/SDKCompatility.html

    4 ”Avalid provisioning profile for this executable was not found“ 问题

            ”A valid provisioning profile for this executable was not found“ 问题google一下有很多答案,我在这里总结一下我的经验。从描述上可以看到说:对于可执行provisioning profile 没有被找到。所以网上有很多答案是说你provisioning profile没有被找到,需要重新导入之类的。

            但是我碰到的原因是我在Project中将Code Signing Identity中将其设置成了iPhone Develop,但是在Target中的Code Signing Identity并没有自动切换过来,我发现在Target中的Code Signing Identity还是我之前的设的iPhone Distribution,所以看到这里就知道了,iPhone Distribution 的provisioning profile肯定是不能运行的,所以把Target中的Code Signing Identity也设置成iPhone Develop就ok了,这样一切都说的通了,唯一不合理的就是在Project切换Code Signing Identity并编译,但xCode没有自动将编译后的Target设置成和Project中的一致。

    5 IOS使用模态框弹出子视图后,子视图大小设置

            IOS SDK内建支持模态窗口式弹出方式(利用presentModalViewController方法),原理是将子视图包含在一个模态视图中,但是不足之处在于此模态视图大小是固定的,为540*620,若子视图大小小于这个,周围就会出现灰色边缘。

            要解决此问题,在执行完presentModalViewController方法之后,再次手动设置模态窗口大小:subVC.view.superView.frame

    6 UIImageView加圆角

    圖片要加圓角的做法在 iphone 3.0 變得很容易

    imageThumbnail.image=[UIImageimageWithContentsOfFile:strPath];

    imageThumbnail.layer.masksToBounds=YES;

    imageThumbnail.layer.cornerRadius=10.0;

    imageThumbnail.layer.borderWidth=1.0;

    //边框阴影宽度

    imageThumbnail.layer.borderColor=[[UIColorgrayColor] CGColor];

    透過以上的程式碼就可以達到目的, 真是方便很多Orz. 請記得要import 

    7 dequeueResuableCellWithIdentifier原理

    dequeueReusableCellWithIdentifier原理 

    http://ronglei0324.blog.163.com/blog/static/67633223201312631558212/

    8 auto layout on ios Versions prior to 6.0

    Auto Layout on iOS Versions prior to 6.0

    http://blog.csdn.net/topbar/article/details/12345511

    9 Xcode模拟器simulators7,6,5下载地址及安装

    1.下载链接

    iOS7.0模拟器:

    http://devimages.apple.com/downloads/xcode/simulators/ios_7_0_simulator.dmg

    iOS6.1模拟器:

    http://devimages.apple.com/downloads/xcode/simulators/ios_6_1_simulator.dmg

    iOS6.0模拟器:

    http://devimages.apple.com/downloads/xcode/simulators/iphone_6_0_iphonesimulatorsdk6_0.dmg

    iOS5.1模拟器:

    http://devimages.apple.com/downloads/xcode/simulators/iphone_5.1_iphonesimulatorsdk5_1.dmg

    iOS5.0模拟器:

    http://devimages.apple.com/downloads/xcode/simulators/ios_50_simulator-1.dmg

    iOS 7 doc set 

    http://devimages.apple.com/docsets/20130918/091-9917-A.dmg 

    xcode 5 doc set 

    http://devimages.apple.com/docsets/20130918/091-9915-A.dmg  

    2. iOS模拟器的安装

    2.1常规安装

    Xcode

            默认支持的iOS模拟器的在线安装,启动Xcode5.1后打开菜单Xcode->Preferences...再点击Downloads就可以看到Xcode默认支持的iOS各版本模拟器,如果还没有安装,只需要点击后面的下载箭头标识,Xcode就会自动下载和安装相应的组件,因为需要下载和安装,可能需要等待较长时间才能完成下载和安装。另外,下载的临时文件存放在/Users//Library/Caches/com.apple.dt.Xcode/Downloads目录中。

    2.2第三方下载器下载后安装但是往往用xcode自动下载模拟器会非常慢 或者经过很长一段时间后提示Failed to mount file 什么的这时候 就可以找到下载链接用下载器进行下载,进入目录

    /Users//Library/Caches/com.apple.dt.Xcode/Downloads  将5dba03a4b33ac2c0d7a72e94475011c25eb06a73.dvtdownloadableindex 类似文件重命名成.plist后缀文件(com.apple.dt.Xcode 要右键显示包内容进入,不要双击打开)找到downloadables, 某个item中 寻找 dmg  source下载地址可以找到simulator dmg明显字样的链接 下载即可(文章开头的链接就是取自plist文件)

    2.3下载后的dmg安装.这里主要以iOS7.0模拟器的离线安装为例进行说明,其他版本以此类推:

            下载ios_7_0_simulator.dmg后打开dmg文件,可以看到安装包iPhoneSimulatorSDK7_0.pkg,使用安装器安装此安装包,默认会安装在所选分区的/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator7.0.sdk目录下,完全退出Xcode后将刚才安装的iPhoneSimulator7.0.sdk整个目录复制或移动到/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs目录下即可,(Xcode.app右键可以"显示包内容“)重新启动Xcode一般就可以使用相应版本的模拟器进行开发和调试了。

            离线安装还有一个简单的办法就是将以前安装过的旧版本的Xcode如Xcode5.0.2下面已经安装好了的iOS模拟器直接复制过来使用,目录位置都一样,都是在Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs里面。这样就不用再下载离线安装包了。

    10 iOS:忘记密码或输入错误密码后设备停用

            当您在设置密码确保安全使用iPhone、iPad或iPod touch后输入了错误的密码,可能会看到设备“已停用”的消息。了解如果您已忘记或不记得自己的密码或者设备显示“已停用”的消息时应如何处理。

            如果您输入错误密码六次或以上,将看到以下任一消息:

    § iPhone 已停用

    § iPad 已停用

    § iPod touch 已停用

            如果您之前将设备与 iTunes 同步过,您或许能够通过恢复设备来重设密码:

        1. 将设备连接到通常与之同步的电脑,然后打开 iTunes。注:如果 iTunes 提示您输入密码,请尝试已经与其同步的另一台电脑。否则,请前往下文“如果您从未将设备与 iTunes 同步,或没有权限访问电脑”部分。

        2. 如果设备仍处于停用状态,或者 iTunes 没有自动同步您的设备,请将设备与 iTunes 同步。

        3. 备份和同步完成后,请恢复您的设备。

        4. 当 iOS 设置助理要求设置设备时,请选取“从iTunes 备份恢复”。

        5. 在 iTunes 中选择您的设备,然后选取最近的设备备份。

            如果您从未将设备与iTunes同步,或没有权限访问电脑,或者如果您看到以下警告之一,则需要抹掉设备上的数据:

            “iTunes 未能连接到 [设备],因为它已被使用口令锁定了。您必须在 [设备] 上输入口令,然后才能与 iTunes 配合使用它。”

            “您尚未选择让 [设备] 信任此电脑”

            如果您已启用“查找我的 iPhone”,则可以使用“远程擦除”来抹掉设备上的内容。如果您已使用 iCloud 来备份,或许能在抹掉设备内容后恢复最新的备份并重设密码。

            或者,将设备置于恢复模式并将其恢复以抹掉设备上的内容:

        1. 断开 USB 线缆与设备的连接,但保持线缆的另一端与电脑的 USB 端口相连。

        2. 关闭设备:按住睡眠/唤醒按钮数秒,直到出现红色滑块,然后滑动该滑块。等待设备关闭。

        3. 按住主屏幕按钮,同时将 USB 线缆重新连接到设备。设备应会打开。

        4. 继续按住主屏幕按钮,直到出现“连接iTunes”屏幕。

        5.  iTunes 将提醒您,其检测到一个处于恢复模式的设备。点按“好”,然后恢复设备。

    其他信息

        了解有关设置和使用密码的信息。

        您可以将设备配置为在连续十次输入错误密码后自动抹掉。此设置在默认情况下未启用。可通过轻按“设置”>“密码锁定”来打开此设置。

    11 block避免循环引用

            由于我们很多行为会导致Block的copy,而当Block被copy时,会对block中用到的对象产生强引用(ARC下)或者引用计数加一(non-ARC下)。

    如果遇到这种情况:

    @property(nonatomic, readwrite, copy) completionBlock  completionBlock;

    //========================================

    self.completionBlock = ^ {

            if  (self.success) {

      self.success(self.responseData);

            }

        }

    };

        对象有一个Block属性,然而这个Block属性中又引用了对象的其他成员变量,那么就会对这个变量本身产生强应用,那么变量本身和他自己的Block属性就形成了循环引用。在ARC下需要修改成这样:

    @property(nonatomic, readwrite, copy) completionBlock  completionBlock;

    //========================================

    __weak typeof(self) weakSelf = self;

    self.completionBlock = ^ {

        if  (weakSelf.success) {

      weakSelf.success(weakSelf.responseData);

        }

    };

            也就是生成一个对自身对象的弱引用,如果是倒霉催的项目还需要支持iOS4.3,就用__unsafe_unretained替代__weak。如果是non-ARC环境下就将__weak替换为__block即可。non-ARC情况下,__block变量的含义是在Block中引入一个新的结构体成员变量指向这个__block变量,那么__block typeof(self) weakSelf = self;就表示Block别再对self对象retain啦,这就打破了循环引用。

    Block的引用循环问题(ARC& non-ARC)

    http://www.hrchen.com/2013/06/retain-cycle-in-block/

    a-look-inside-blocks-episode-1

    http://www.galloway.me.uk/2012/10/a-look-inside-blocks-episode-1/

    a-look-inside-blocks-episode-2

    http://www.galloway.me.uk/2012/10/a-look-inside-blocks-episode-2/

    a-look-inside-blocks-episode-3

    http://www.galloway.me.uk/2013/05/a-look-inside-blocks-episode-3-block-copy/

    12 runloop

    (good)Objective-C之run loop详解

    http://blog.csdn.net/wzzvictory/article/details/9237973

    (good)iOS多线程编程指南(三)Run Loop

    http://www.dreamingwish.com/dream-2012/ios-multithread-program-runloop-the.html

    13 iOS多线程开发指南

    iOS多线程开发指南

    http://www.dreamingwish.com/dream-category/toturial/ios-mulit-thread-program-guide

    iOS多线程编程指南(一)关于多线程编程

    http://www.dreamingwish.com/dream-2012/ios-multi-threaded-programming-a-multi-threaded-programming.html

    iOS多线程编程指南(二)线程管理

    http://www.dreamingwish.com/dream-2012/ios-multi-threaded-programming-the-thread-management.html

    iOS多线程编程指南(三)RunLoop

    http://www.dreamingwish.com/dream-2012/ios-multithread-program-runloop-the.html

    iOS多线程编程指南(四)线程同步

    http://www.dreamingwish.com/dream-2012/the-ios-multithreaded-programming-guide-4-thread-synchronization.html

    14 GCD(Grand Central Dispatch)教程

    发布者:Seven's - 2012/03/03 - 分类:梦印象

            Grand Central Dispatch或者GCD,是一套低层API,提供了一种新的方法来进行并发程序编写。从基本功能上讲,GCD有点像NSOperationQueue,他们都允许程序将任务切分为多个单一任务然后提交至工作队列来并发地或者串行地执行。GCD比之NSOpertionQueue更底层更高效,并且它不是Cocoa框架的一部分。

    入门教程:

    GCD介绍(一): 基本概念和Dispatch Queue

    GCD介绍(二): 多核心的性能

    GCD介绍(三): Dispatch Sources

    GCD介绍(四): 完结

    进阶:

    GCD实战一:使用串行队列实现简单的预加载

    GCD实战二:IO资源竞争

    15 Block教程系列

    发布者:Seven's - 2013/04/22 - 分类:梦印象

    ios开发block的使用指南,以及深入理解block的内存管理,也适用于osx开发。

    讨论范围:block的使用,内存管理,内部实现。

    不包含的内容:gc arc下的block内存,block在c++中的使用。

    Block介绍(一)基础

    Block介绍(二)内存管理与其他特性

    block介绍(三)揭开神秘面纱(上)

    block介绍(四)揭开神秘面纱(下)

    16 iOS开发 git github 初学+进阶

    iOS开发git github初学+进阶

    http://guxiaojje.blog.163.com/blog/static/140942291201272110343064/

    17 iPhone应用程序的启动过程

    iPhone应用程序的启动过程

    http://mobile.51cto.com/iphone-284474.htm

    18 使用静态IP无法打开部分网页的解决办法

            使用静态IP无法打开部分网页的解决办法,手动设置DNS,并且备用DNS设置为114.114.114.114

    19 js枚举类型

    js枚举类型定义:

        方法1:

    var DataType = {String1:value1,String2:value2 }

         方法2:

    var DataType = { } ;

    DataType.String1=value1;

    DataType.String2=value2;

        遍历枚举类型:

    for(var i in DataType ){

    DataType[i]; //获取value

    i;//下标

     }

    20 当前无线网络不能勾选“自动发现代理”,不然无法Safari无法联网

    相关文章

      网友评论

        本文标题:IOS开发问题索引(四)

        本文链接:https://www.haomeiwen.com/subject/lpuuxftx.html