1.用@()来封装C字符串
当我们调用一些C函数生成一些字符串的时候,这些字符串很有可能没有经过处理,从而再传递给它的接受者的时候,会产生一些问题。我们可以使用@()将生成的C字符串封装起来-->NSString,这样就可以避免编码等一些问题。
2.swift开发中应避免使用optional 类型 ,当我们不想要给一个变量设置初始值,我们可以用 lazy 声明,当然我们在给它们赋值之前,不要调用getter方法。
3.获取Storyboard视图容器里的子视图控制器
// 1. A property has the same name as a segue identifier in XIB
@property (nonatomic) ChildViewController1 *childController1;
@property (nonatomic) ChildViewController2 *childController2;
// #pragma mark - UIViewController
- (void)prepareForSegue:(UIStoryboardSegue *)segue
sender:(id)sender
{
[super prepareForSegue:segue sender:sender];
// 2. All known destination controllers assigned to properties
if ([self respondsToSelector:NSSelectorFromString(segue.identifier)]) {
[self setValue:segue.destinationViewController forKey:segue.identifier];
}
}
- (void)viewDidLoad {
[super viewDidLoad];
// 3. Controllers already available bc viewDidLoad is called after prepareForSegue
self.childController1.view.backgroundColor = [UIColor redColor];
self.childController2.view.backgroundColor = [UIColor blueColor];
}
4.重复运行项目,不重复构建项目
“Product>Perform Action>Run without Building”
5.快速获取Playground资源
Swift里的所有Playground共享相同的数据目录:/Users/HOME/Documents/Shared Playground Data
func pathToFileInSharedSubfolder(file: String) -> String {
return XCPSharedDataDirectoryPath + "/" + NSProcessInfo.processInfo().processName + "/" + file
}
processName属性是Playground文件的名字,因此只要你已经在Playground数据共享文件目录下以相同的名字新建了一个子目录,那么你可以很容易访问这些数据,和读取本地JSON数据一样
6.快速的方法来检查APP里用到的所有pods
$ class-dump -C Pods_ /Applications/Squire.app | grep -o "Pods_\w+"
7.禁用dylib钩子
在你的“Other Linker Flags”里加上下面这行:
-Wl,-sectcreate,__RESTRICT,__restrict,/dev/null
8.通过调试获取内部常量
加断点
(lldb) br set -n "+[UITransitionView defaultDurationForTransition:]"
执行该方法
(lldb)finish