1. iOS - Data protect level

    一、设置 Complete 保护等级 The default protect level for iOS file is NSFileProtectionCompleteUntilFirstUserAuthentication in iOS, it can be set to NSFileProtectionComplete which is the safest level. Because system will delete the hierarchy secret key in memory and set the file to unreadable. 设置 NSData 的保护等级 NSData * data = [NSData new]; NSError…

    on iOS

  2. Xcode Build Settings - Preprocessing

    编译器标识 编译器标识被用来在编译时定义常量,可以针对你的代码编译配置做一些 tricky 的事情。 有三个地方可以设置这些 OTHER_CFLAGS (Other C Flags) GCC_PREPROCESSOR_DEFINITIONS (Preprocessor Macros) INFOPLIST_PREPROCESSOR_DEFINITIONS (Info.plist Preprocessor Definitions) Other C Flags 的设置和其他两个预处理设置的区别是它的值会被直接传递给编译器。这意味着如果你想定义一个叫 "A1" 的常量,你可以设置一个 C Flag -DA1,它将被原样传递给编译器,并且将定义A1常量。然而,这样潜在的风险是一个错误的 C 标识位设置将会潜在增加你的编译时间。 另一方面,通过预处理器设置 -D 传入的任何内容都将被自动传递给编译器。就像上面说的 A1 参数那样设置。这意味着如果一旦写了一个错误的标识,也会得到一个格式错误的返回结果。因此,…

    on iOS

  3. Ghost - How to reset forget password

    It's very difficult to stay calm when the thing's you don't expect happen Forget password Someday, I forgot my ghost blog's password and even more unfortunate thing is that I tried 5 times but all failed which result in my account was locked. How to unlock your account The steps…


  4. Conclusion of objective-C structure

    The isa pointer of Instance and Class Firstly, let's have a look at the struct objc_class * of Class, objc_class inherits from objc_object which only have a isa. //Class is in effect a struct pointer of (objc_class *) typedef struct objc_class *Class; //The struct objc_class struct…

    on iOS

  5. Some problems with refresh UICollectionView

    May flash on the screen Sometiems you may find your collectionView has a phenomenon of flash when you call reloadData which is because adding cells is in layoutSubviews method, as layoutSubViews will be called in the next runloop after call reloadData, in this case the visibleCells method may return nil,…


  6. Clang - Use Xcode to make first Clang plugin

    How to build clang~ Firstly, you need download and install CMake, a article about how to study CMake for new leaner. Secondly, make directory and download the LLVM source code: //make directory cd /opt sudo mkdir llvm sudo chown `whoami` llvm cd llvm export LLVM_HOME=`pwd` //downlaod the source…

    on iOS

  7. A interesting inheritance question between self and super

    Here is a inheritance chain relationship: NSObject -> RootCls -> SubCls Think About a question? What will the followed code to be printed? @implementation SubCls - (void)print { NSLog(@"%@",[self class]); NSLog(@"%@",[self superclass]); NSLog(@"%@",[super class]); NSLog(@"%@",[super superclass]); } @end Ordinary, the wrong answer may look like…

    on iOS

  8. Objective-C - a NSObject

    Mitchell Convert OC to C++ Transformation way: We can assign the platform to iphoneos with arm64 architecture, while it will output with multi platform architecture automatically. //It will automatically generate main.cpp file xcrun -sdk iphoneos clang -arch arm64 -rewrite-objc main.m //Assign your output file name xcrun -sdk iphoneos…

    on iOS

  9. iOS - autoreleasepool and @autoreleasepool

    Mitchell 一、自动释放池 官网关于自动释放池的说明:NSAutoreleasePool 类被用来支持自动引用计数内存管理系统。一个自动释放池存储的对象当自己被销毁的时会向其中的对象发送 release 消息。 1、Overview + 在一个自动引用计数的环境中(并不是垃圾回收机制),一个包含了多个对象的 NSAutoreleasePool 对象能够接收 autorelease 消息并且当销毁它的时候会对每一个池子中的对象发送 release 消息。因此,发送 autorelease 而不是 release 消息延长了对象的生命周期直到 pool 被清空的时候(当对象被保留的时候会更久)。一个对象能够被放到同一个池子中许多次,在这种情况下每放一次都会收到一个 release 消息。 在引用计数的环境中,Cocoa 期望有一个自动释放池能够保持有效。如果一个池子没有用了,需要自动释放的对象没有被释放从而会造成内存泄漏。在这种情况下,你的程序将会报错。 Application Kit 在事件循环开始的时候在主线程创建了一个自动释放池,并且在结束的时候去清空它,从而释放所有进程事件中生成的自动释放的对象。如果使用了 Application Kit ,就没必要再去创建自己的自动释放池。然而,…

    on iOS

  10. iOS - MitRegx

    MitRegx,这个小轮子写了很长时间了,感觉还算比较实用。 一、困扰 以往我们在登录注册的时候要去校验诸如账号、密码和验证码的一些格式是否正确,可能会写出如下的代码: if (账号的格式正确&&密码的格式正确&&验证码的格式正确){ [发送网络请求进行下一步] } 这样的代码看上去很难受。 二、函数式编程 那个时候用 Masonry,体会了函数式编程的好处: 代码简洁 易于理解 方便代码管理 MitRegx MitRegx 分4个部分 MitRegx.h 头文件,便于类的导入。 MitRegxConst.h ,这个类中存放了一些错误状态的常量。 MitRegexMaker.h 核心逻辑处理类,在这里对通用的验证逻辑进行处理。 /** 校验状态 */ @property(nonatomic, assign)MitRegexStateType status; /** 返回状态文本 */ @property(nonatomic, strong)…

    on iOS