您的位置:首页 > 移动开发 > IOS开发

ios8适配遇到的问题及解决方法

2015-08-19 16:32 148 查看
Xcode6,Bulid Setting中的Base SDK选择ios8.0

1.程序中经常用到的,viewWillAppear之类的函数,要调用其super方法,之前不写没问题没警告,8.0中有警告。

2.[UIScreen mainScreen].bounds的值在ios8中是随横竖屏改变的,例如:

Iphone5竖屏的bounds为(0,0,320,568),在横屏时则为(0,0,568,320);

界面问题大都是这个问题导致的。

3.UILabel的对齐方式,如果之前的是使用UITextAlignment枚举的,其实这个在ios6之后就废弃了,改为使用NSTextAlignment枚举,之前版本没有改,适配ios8时改的。

4.arm64适配:

arm64适配首先要在工程的Bulid Setting中设置指令集,如下

1.) Architectures为Standard architectures(armv7,arm64)

2.)ValidArchitectures中添加arm64

arm64数据类型字节变化如下(常用的):

数据类型
32-bit size
64-bit size
char
1 byte
1 byte
BOOL,bool
1 byte
1 byte
short
2 byte
2 byte
int
4 byte
4 byte
long
4 byte
8 byte
long long
8 byte
8 byte
float
4 byte
4 byte
double
8 byte
8 byte
CGFloat
4 byte
8 byte
size_t
4 byte
8 byte
time_t
4 byte
8 byte
NSInteger
4 byte
8 byte
做数据类型的转换,拿NSInteger和int之间的转换为例,其他可以使同样方法转换。例:

NSInteger a = 5;

int b = a; 64-bit中这样是错误的

int c = [@(a) intValue]; 这样就正确了,用NSNumber类型来转化

NSLog(@”a 的值为 %d”,a); 同样的道理,64-bit中错误,可以写为

NSLog(@”a 的值为 %@”,@(a));

当然也可以使用强制转化,intd = (int)a; 个人不喜欢这种转化

3.)写代码时时常用到数组,64-bit中数组的count类型为NSUInteger类型,故直接赋值给int型也是不正确的,需要做转化,转化方式,我用了上面同样的方法。

4.)假如现在有一不为空数组array,for循环遍历

for(int i = -1; i < array.count; i ++)

{

NSLog(@”%d”,i);

}

这样结果for循环一次没进,数组的count是NSUInteger类型,-1与其比较时隐士转换成NSUInteger,变成了一个很大的数字,需要小心处理此类问题。

牵扯到的库不支持arm64的,要更新成最新的。

以上仅个人观点。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: