iOS开发问题总结

一、屏幕适配
1.程序启动会自动加载叫做Default的图片
 1> 3.5inch 非retain屏幕:Default.png
 2> 3.5inch retina屏幕:Default@2x.png
 3> 4.0inch retain屏幕: Default-568h@2x.png
 2.只有程序启动时自动去加载的图片, 才会自动在4inch retina时查找-568h@2x.png
 
二、一个控件用肉眼看不见,有哪些可能
 1.根本没有创建实例化这个控件
 2.没有设置尺寸
 3.控件的颜色跟父控件的背景色一样(实际上已经显示了,只不过用肉眼看不见)
 4.透明度alpha <= 0.01
 5.hidden = YES
 6.没有添加到父控件中
 7.被其他控件挡住了
 8.位置不对
 9.父控件发生了以上情况
 10.特殊情况
 * UIImageView没有设置image属性,或者设置的图片名不对
 * UILabel没有设置文字,或者文字颜色和跟父控件的背景色一样
 * UITextField没有设置文字,或者没有设置边框样式borderStyle
 * UIPageControl没有设置总页数,不会显示小圆点
 * UIButton内部imageView和titleLabel的frame被篡改了,或者imageView和titleLabel没有内容
 * .....
 
 解决办法:添加一个控件的建议(调试技巧):
 1.最好设置背景色和尺寸
 2.控件的颜色尽量不要跟父控件的背景色一样
 
三、 更换系统自带的tabbar
1.如果tabBar设置完delegate后,再执行下面代码修改delegate,就会报错
     tabBar.delegate = self;
2.如果再次修改tabBar的delegate属性,就会报下面的错误
错误信息:Changing the delegate of a tab bar managed by a tab bar controller is not allowed.
错误意思:不允许修改TabBar的delegate属性(这个TabBar是被TabBarViewController所管理的)
 
3.系统控件为readonly(只读),利用KVC可以随意修改一个对象的属性或者成员变量(并且私有的也可以修改)
3.1 forKeyPath包含了forKey的功能,以后使用forKeyPath就可以了
3.2 forKeyPath中可以利用.运算符, 就可以一层一层往下查找对象的属性
3.3 下面这行代码过后,tabBar的delegate就是HWTabBarViewController
     [selfsetValue:tabBar forKeyPath:@"tabBar"];相当于self.tabBar = tabBar;
     [self setValue:tabBar forKeyPath:@"tabBar"];
     说明,不用再设置tabBar.delegate = self;
 
四、NSKeyedArchiver和writeToFile的区别
1.NSKeyedArchiver
自定义对象的存储必须用NSKeyedArchiver,不再有什么writeToFile方法
   [NSKeyedArchiver archiveRootObject:<#(nonnull id)#> toFile:<#(nonnull NSString *)#>];
2.writeToFile是NSDictionary和NSArray的方法
    NSMutableDictionary *dictM = [NSDiNSMutableDictionaryctionary dictionary];
    [dictM writeToFile:<#(nonnull NSString *)#> atomically:<#(BOOL)#>];
 
    NSMutableArray *arrayM = [NSMutableArray array];
    [arrayM writeToFile:<#(nonnull NSString *)#> atomically:<#(BOOL)#>];
 
五、沙盒归档和解档
/**
 *  当一个对象要归档进沙盒中时,就会调用这个方法
 *  目的:在这个方法中说明这个对象的哪些属性要存进沙盒
 */
- (void)encodeWithCoder:(NSCoder *)encoder;
 
/**
 *  当从沙盒中解档一个对象时(从沙盒中加载一个对象时),就会调用这个方法
 *  目的:在这个方法中说明沙盒中的属性该怎么解析(需要取出哪些属性)
 */
- (id)initWithCoder:(NSCoder *)decoder;
原文地址:https://www.cnblogs.com/zengshuilin/p/5777102.html