我是开发者 - 小钿博客

一个小开发仔 ~

"hext" 发布的文章

iOS开发备忘笔记 (3)

一、iOS应用的 UIWindow

各种方式获取的 window:

[UIApplication sharedApplication].delegate.window; //应用的主线窗体, 大部分情况下都是 keyWindow (用 makeKeyAndVisible 设置), 一般提示弹窗什么的都基于它
[UIApplication sharedApplication].keyWindow; //应用当前的活跃窗口, 一般是 delegate.window , 键盘出来后就是键盘所在的窗体
[UIApplication sharedApplication].windows.lastObject; //最后一个window, 一般是最上层的窗体, 可能是主程序视图, 也可能是键盘或者其他小浮窗什么的

自己新建 window:

  1. window 对象释放 窗口即释放, 所以对象要全局保存
  2. window 设置BackgroundColorclearColor, 或者opaque = NO还是点不到下面的window, 除非设置alpha = 0

iOS开发备忘笔记 (2)

  1. 不能改优先级为UILayoutPriorityRequired (1000)的约束

  2. heightForRowAtIndexPath没有被正确测量cell的高度时,cellForRowAtIndexPath可能会被不必要的调用,即不可见的cell也会被调用。如果正好数据量很大,会导致性呢个严重下降。

  3. present出一个背景可透明的viewController

     if (IOS_VERSION >= 8.0) {
         vc.modalPresentationStyle = UIModalPresentationOverCurrentContext;
     }else{
         self.modalPresentationStyle = UIModalPresentationOverFullScreen;
     }
     vc.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
     [self presentViewController:vc animated:YES completion:nil];
    

iOS开发备忘笔记 (1)

  1. NSString常量定义:

    正确:

     NSString * const name = @"value";
    

    错误:

     const NSString * name = @"value"; 
     NSString const * name = @"value";
    

    总结: const* 前 代表 *name 不可变, 在 * 后代表 name不可变. 我们一般都 是想让 name 的值不变, 所以应该把 const 放在 * 后;

    *前面是指针指向的修饰符, *后面是指针本身的修饰符

  2. 格式化日期输出星期的不同表示:

     NSDateFormatter * dateFormatter = [[NSDateFormatter alloc] init];
     dateFormatter.dateFormat = @"E EE EEE EEEE EEEEE EEEEEE EEEEEEE";
     NSString * dateStr = [dateFormatter stringFromDate:[NSDate date]];
     NSLog(@"%@", dateStr);
     //输出:    周六 周六 周六 星期六 六 周六 周六
    

使用UUID+KeyChain记录设备唯一标识

福利:

思路:

  • 保存到 Keychain(钥匙串) 中的数据不会随应用卸载而删除, 除非恢复出厂设置. 所以可以生成一串字符保存到钥匙串中, 作为设备唯一标识.

实现:

  1. 生成一串唯一的字符作为设备唯一标识. 要在一个大程度上唯一的只有 UUID 了. iOS中提供了相关方法可以获取 UUID :

    • [[NSUUID UUID] UUIDString]: [NSUUID UUID] 方法每次调用都会生成一个不同的 UUID .

    • [[[UIDevice currentDevice] identifierForVendor] UUIDString]: identifierForVendor 可以获取这个应用在这台手机上的唯一标识, 但是卸载重装应用之后会变化.

  2. UUID 保存到 Keychain 中: 直接操作 Keychain 的代码是非常繁琐容易出错的, 所以使用一个已经封装好的操作类 SFHFKeychainUtils 来操作 Keychain.

Jenkins实现持续集成-使用Ant脚本构建ios项目

原文 : tomczhen的博客

在Jenkins平台上使用Ant脚本构建iOS项目, 可以做到自动构建打包, 上传蒲公英, 构建完成发送微信通知 等功能. 发布开发者进行测试分发,只需要点一下即可完成一系列操作.

Jenkins构建面板

隐藏