`
啸笑天
  • 浏览: 3462804 次
  • 性别: Icon_minigender_1
  • 来自: China
社区版块
存档分类
最新评论

xcode4.5(iOS 6)开发与之前的差异

 
阅读更多

1.

开发iphone5和ios6版本最低需要使用xcode4.5,而xcode4.5不再支持armv6即:iOS4.3.3以下的系统.

不被支持的硬件设备包括:iPod 2nd gen, iPhone 3G 或更老的iPhone

例如我打包时的错误提示就是:

warning: iOS deployment targets lower than 4.3 are not supported (current

IPHONEOS_DEPLOYMENT_TARGET = "4.0", ARCHS = "armv7").

(null):  iPhone/iPod Touch: application executable is missing a required

architecture.  At least one

of the following architecture(s) must be

present: armv6 (-19033)

 

2.

适配4英寸屏幕适配

旧应用要与4英寸屏幕进行适配,需要创建一张Default-568h@2x.png图片,系统根据是否有此资源来识别是否

支持4英寸屏幕。至于其他资源不允许使用xxx-568h.jpg此格式来适配屏幕,需要使用代码对屏幕进行检测来分别

进行适配。

一般用于判断iphone5的代码:


#define iPhone5 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640,1136),[[UIScreen mainScreen] currentMode].size) : NO)

#define iPhone5_0 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(320,568), [[UIScreen mainScreen] currentMode].size) : NO)

为什么要写2个呢,这并不是没有作用的,如果代码写界面的话,在iPhone5下View的高是568,也就是判断的时候

用的宏是第二个,最好是把这2个宏写在项目的XXX-Prefix.pch这个文件里面。

 

3.

ios6转屏问题,控制视图的旋转

 

4.

UINavigationViewController的变化

在开发过程中发现的,该类的initWithRootViewController在之前的版本是最终会调用到init方法的。

因此在继承UINavigationViewController时,直接在重写init方法来初始化对象所需属性即可。

但是在iOS6上是不会调用init方法,因此需要开发者们注意。

 

5.

CFRelease的变化
在之前版本中如果CFRelease传入nil是被允许的,这也符合我们传入nil对象不会对我们的程序造成影响,但是在iOS6中,

这样的写法程序就

直接把你的程序Crash掉了,所以代码中还是需要判断一下是否为nil才是安全的做法。
6.

UIPickerView的变化

在之前版本中调用[_pickerView selectRow:-1 inComponent:0 animated:YES];是允许的。但在

iOS6中会导致崩溃。

 

7.

UIActivityIndicatorView的变化

在之前的版本中假如调用了startAnimating方法之后,只要把UIActivityIndicatorView添加到子视图中

就会显示加载动画,但在iOS6只要移出显示队列则会停止动画,特别在UITableViewCell中加入此控件,

只要滚动几下

Cell的 UIActivityIndicatorView就消失了, 为解决此问题可以在加入显示队列时根据
isAnimating属性来判断是否执行动画, 如果没有则重新调用一下startAnimating方法。

for (UIView *_curView in cell.subviews) {

      if ([_curView isKindOfClass:[UIActivityIndicatorView class]]) {
        [(UIActivityIndicatorView *)_curView startAnimating];
        break;
      }
    }

 

8

通讯录列表获取差异

 

ABAddressBookRef addressBook = nil;
	 
if ([[UIDevice currentDevice].systemVersion floatValue] >= 6.0)
{
    addressBook = ABAddressBookCreateWithOptions(NULL, NULL);	 
    //等待同意后向下执行
    dispatch_semaphore_t sema = dispatch_semaphore_create(0);
    ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error)
    {
        dispatch_semaphore_signal(sema);
    });
          
    dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
    dispatch_release(sema);
}
else
{
    addressBook = ABAddressBookCreate();
}
	 
NSArray *personArray = (NSArray *)ABAddressBookCopyArrayOfAllPeople(addressBook);

 

9.

由于ios6中,把viewDidUnLoad这个函数给撤销了,详见:http://justsee.iteye.com/admin/blogs/1820588

 

10

以前属性是objective-C的一个新机制,并且要求必须声明与之对应的实例变量,例如

@interface MyViewController: UIViewController
{
   UIButton *myButton;
   IBOutlet UIButton *myButton2;
}

@property (strong, nonatomic) UIButton *myButton;
@property (strong, nonatomic) UIButton *myButton2;
@end

 现在不需要为属性声明实例变量了,IBOutlet关键字移到了属性声明中了,例如:

@interface MyViewController: UIViewController
    @property (strong, nonatomic) UIButton *myButton;
    @property (strong, nonatomic) UIButton *myButton2;
@end

 

 11

    @synthesize by default(属性自动绑定)在xcode4.5以前,当我们想为类添加一个新的属性,一般都要对应写实例变量和相应的synthesis,但是在Xcode 4.5,synthesis现在会对应property自动生成。默认行为下,对于属性foo,当开发者没有写相应的synthesis的时候,编译器会自动在实现文件中为开发者补全synthesis,就好像你写了@synthesis foo = _foo。

    总结一下,新的属性绑定规则如下:

       ● 除非开发者在实现文件中提供getter或setter,否则将自动生成

       ● 除非开发者同时提供getter和setter,否则将自动生成实例变量

       ● 只要写了synthesis,无论有没有跟实例变量名,都将生成实例变量 。 如开发者写了@synthesize foo;那么实例变量名就是foo

       ● dynamic优先级高于synthesis 。对于写了@dynamic的实现,所有的对应的synthesis都将不生效

 

 

12

@literals

@除了可以表示NSString对象外。现在还可以表示数字、数组、字典、和表达式

NSString * string = @"a string object";

NSNumber * numberFromNumber= @12;

NSNumber * numberFromExpression= @(20 + 40);

NSArray * array = @[obj1, obj2]; //注意上面不再需要nil结尾

NSDictionary * dictionary = @{@"key1" : value1, @"key2" : value2}; //上面也不再需要了,而且key在value前面了。

然后就是这些东西可以互相嵌套,比如

NSArray * array = @[@{@"name" : @"Bacon", @"age" : @12}, @{@"name" : @"Dave", @"age" : @14}]; 

 

 13

NSArray 和 NSDictionary 可以使用[]语法了

现在可以直接写:

 id firstElement = anArray[0];

anArray[0] = newValue;

替代以前的

id firstElement = [anArray objectAtIndex:0];

[anArray replaceObjectAtIndex:0 withObject:newValue];

 

id value = aDictionary[@"key"];

aDictionary[@"key"] = newValue;

替代以前的

id value = [aDictionary objectForkey:@"key"];

[aDictionary setObject:newValue forKey:@"key"];

 

14

在.m自己用的“私有”消息可以不用ClassExtension表达了。

想在.m文件里添加自己的一些消息而不在.h文件里出现,可以在最近的ClassExtension语法里表达如下@interface AClass ()

- (void) privateMethod;

@end

@implement AClass

- (void) privateMethod{ }

@end

现在 可以直接在.m文件里写,而编译器不会出现警告此方法未声明

@implement AClass

- (void) privateMethod{ }

@end

如果不知道ClassExtension语法的, 我只想说,ClassExtension是类似Category语法的东西,在.m文件内添加一个无名的Category的@interface声明,然后就可以在里面写私有方法声明,避免编译器乱提示警告。

 

-----------切糕分割线------------------

慢慢整理待续

分享到:
评论

相关推荐

    macos-lion-dp4-10.8+ios6+xcode4.5.zip

    标题中的"macos-lion-dp4-10.8+ios6+xcode4.5.zip"揭示了这个压缩包包含的是苹果操作系统Mac OS X Lion的第四个开发者预览版(DP4)以及iOS 6和Xcode 4.5的相关内容。Mac OS X Lion是苹果在2011年推出的操作系统,它...

    Xcode配置iOS16.0开发包DeviceSupport

    将Xcode适配可以调试、编译、运行、打包系统版本号为iOS 16.0 版本的设备,解决"Could not find Developer Disk Image"问题

    xcode配置iOS12开发包

    xcode配置iOS12开发包, 解决could not find developer disk image问题。用法:shift+command+G,前往/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport添加进去重启Xcode。

    xcode配置iOS10.3开发包

    在iOS应用开发中,Xcode是苹果官方的集成开发环境(IDE),用于编写、调试和发布iOS和macOS应用程序。当开发者需要针对特定版本的iOS系统进行开发和测试时,必须确保Xcode配备了相应的iOS SDK(Software Development...

    Xcode配置iOS15.5开发包DeviceSupport

    在iOS应用开发中,Xcode是苹果官方提供的集成开发环境(IDE),用于编写、测试和部署iOS和macOS应用程序。当开发者需要支持新的iOS版本,如iOS 15.5时,他们必须确保Xcode拥有相应的`DeviceSupport`文件,这样才能在...

    xcode支持iOS15.2和iOS15.4

    Xcode作为开发工具,它的更新通常会与iOS的最新版本同步。为了支持iOS 15.2和15.4,Xcode需要提供对应的模拟器环境,让开发者可以在没有实际设备的情况下测试应用在这些系统上的表现。开发者可以通过Xcode的设备和...

    xcode配置iOS11.0开发包

    xcode配置iOS11.0开发包 解决iOS 11.0升级后无法真机测试 Could not find Developer Disk Image 使用方法: 在“/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport”里添加...

    xcode配置iOS 10.3开发包

    在iOS应用开发中,Xcode是苹果官方提供的集成开发环境(IDE),用于编写、调试和发布iOS、iPadOS以及macOS平台的应用。本教程将详细讲解如何配置Xcode以支持iOS 10.3的开发环境,特别是针对Xcode 8.3版本。 **一、...

    XCode的iOS11.0开发包

    这个开发包包含了一系列与iOS 11.0兼容的XCode版本,使得开发者能够在最新的操作系统环境下进行应用开发。XCode作为Apple的官方集成开发环境(IDE),提供了代码编辑器、界面构建器、调试工具以及模拟器等一系列功能...

    低版本xcode兼容iOS15.zip

    在iOS应用开发领域,Xcode是苹果官方推荐的集成开发环境(IDE),用于编写和调试针对iOS设备的应用程序。然而,随着iOS系统版本的不断更新,开发者可能遇到一个挑战:如何使用较低版本的Xcode来支持较新版本的iOS。...

    xcode配置iOS 11.3 开发包

    在iOS应用开发中,Xcode是苹果官方提供的集成开发环境(IDE),用于编写、调试和发布iOS和macOS应用程序。当Xcode需要支持特定版本的iOS,如iOS 11.3,开发者需要进行相应的配置。这篇教程将详细介绍如何设置Xcode以...

    iOS9.3.2,iOS10(Xcode_8_beta6)SDK支持xocde5、6

    本资源集中的标题和描述提到了iOS9.3.2和iOS10的SDK,以及它们与Xcode 5、6的兼容性,这对于那些希望在旧版本Xcode上开发或调试新版本iOS应用的开发者来说非常有价值。 首先,iOS9.3.2 SDK是Apple为开发针对iOS...

    IOS 精选源码之 下拉刷新 已封装好,更新到xcode4.5

    "IOS 精选源码之 下拉刷新 已封装好,更新到xcode4.5" 提供了一个已经实现并优化的下拉刷新解决方案,适用于Xcode 4.5版本的项目。这个源码包包含了一个名为"MyRefreshView"的文件,很可能是自定义的刷新视图类,...

    Xcode开发 iOS13.1包

    《Xcode开发与iOS 13.1支持详解》 Xcode是Apple官方提供的集成开发环境(IDE),用于开发iOS、macOS、watchOS以及tvOS等平台的应用程序。随着苹果系统的更新迭代,开发者需要及时掌握最新的开发工具和技术,以确保...

    Xcode配置iOS14.5开发包DeviceSupport

    在iOS应用开发中,Xcode是苹果官方提供的集成开发环境(IDE),用于编写、调试和发布iOS和macOS应用程序。当开发者需要支持新的iOS版本,如iOS 14.5时,他们必须确保Xcode已经配置了相应的`DeviceSupport`文件,以便...

    Xcode 配置iOS 13.1 开发包.zip

    在iOS应用开发领域,Xcode是苹果官方提供的集成开发环境(IDE),用于构建、测试和发布iOS、iPadOS、macOS、watchOS以及tvOS的应用。本教程将深入讲解如何配置Xcode以支持iOS 13.1的开发环境。 首先,确保你的Mac...

    Xcode iOS 16真机调试包 开发调试

    在iOS应用开发中,Xcode是苹果官方提供的集成开发环境(IDE),用于构建、测试和发布iOS、iPadOS以及macOS等平台的应用程序。随着iOS系统版本的不断更新,开发者需要确保他们的应用能够兼容并良好运行在最新的操作...

    Xcode4.5缺少的DevToolCore.framework

    Xcode4.5缺少的DevToolCore.framework,老版本Xcode4.5中拷贝出来的。考虑到有朋友没有备份老版本Xcode,单独考出这个文件,解决PBXCP报错。 将这个文件解压放到报错提示的位置即可(/Contents/Developer/Library/...

    xcode配置iOS 12.1 开发包

    将Xcode适配可以调试、编译、运行、打包系统版本号为iOS 12.1 版本的设备,解决"Could not find Developer Disk Image"问题 使用详情 请前往https://blog.csdn.net/u010731949/article/details/52576792

    Xcode4.5快速Doxygen文档注释

    标题 "Xcode4.5快速Doxygen文档注释" 指向的是使用Xcode 4.5版本配合Doxygen工具来快速为源代码生成专业文档的过程。Doxygen是一款广泛使用的开源文档生成器,它能从C++, C, Objective-C, C#, Java, IDL, PHP, ...

Global site tag (gtag.js) - Google Analytics