IOS小技巧

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


你可能感兴趣的:(IOS小技巧)