zoukankan      html  css  js  c++  java
  • 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;
  • 相关阅读:
    C++ 的继承与虚函数 读书笔记
    C++ 类 、构造、 析构、 重载 、单例模式 学习笔记及练习
    C++ 入门随手笔记及联系
    计算机网络通信、线程、tcp、udp通信及信号量等读书笔记
    进程 信号 通信 消息队列 共享内存 进程间通信 等读书笔记及个人小练习
    C++发展概述、优缺点及应用领域
    剪枝例题大全+题解
    (可行性剪枝,上下界剪枝)「一本通 1.3 例 1」数的划分
    呜呜呜
    「一本通 1.3 例 5」weight]
  • 原文地址:https://www.cnblogs.com/zengshuilin/p/5777102.html
Copyright © 2011-2022 走看看