1、下面两种方式都是弱引用代理对象,但是第一种在代理对象被释放后不会导致崩溃,而第二种会导致崩溃。
(1)@property (nonatomic, weak) iddelegate;
(2)@property (nonatomic, assign) iddelegate;
weak和assign是一种“非拥有关系”的指针,通过这两种修饰符修饰的指针变量,都不会改变被引用对象的引用计数。但是在一个对象被释放后,weak会自动将指针指向nil,而assign则不会。在iOS中,向nil发送消息时不会导致崩溃的,所以assign就会导致野指针的错误unrecognized selector sent to instance。所以我们如果修饰代理属性,还是用weak修饰吧,比较安全。
2、深拷贝&浅拷贝
示例代码:
NSString *string= @"牛大发了";
// 没有产生新对象
NSString *copyString = [stringcopy];
// 产生新对象
NSMutableString *mutableCopyString = [stringmutableCopy];
NSLog(@"string = %p copyString = %p mutableCopyString = %p",string, copyString, mutableCopyString);
NSMutableString*string = [NSMutableStringstringWithString:@"牛大发了"];
// 产生新对象
NSString*copyString = [stringcopy];
// 产生新对象
NSMutableString*mutableCopyString = [string mutableCopy];
NSLog(@"string = %p copyString = %p mutableCopyString = %p", string, copyString, mutableCopyString);
根据打印出来的对象地址可以得出结论:
源对象类型若为NSString,使用copy方法为浅拷贝(不产生新对象),mutableCopy方法为深拷贝(产生了新对象)。
其他对象NSArray、NSMutableArray 、NSDictionary、NSMutableDictionary一样适用。
3、iOS9 以后设置状态栏颜色无效解决方法
在使用一般方法时,在IOS9以后,没有效果
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
这时需要在info.Plist文件里添加下面的参数才可以正常显示
View controller-based status bar appearance 设置成No,默认为Yes
4、[!] Unable to add a source with url `https://github.com/CocoaPods/Specs.git` named `master`.
You can try adding it manually in `~/.cocoapods/repos` or via `pod repo add`.
原因是装了多个Xcode导致路径变了的缘故
解决:在终端中cd到要添加podfile的工程,选择要使用的Xcode的路径
zhangxindeMacBook-Pro:MobileCooperativeOffice zhangxin$ sudo xcode-select -switch/Applications/Xcode\ 8.2.1.app
zhangxindeMacBook-Pro:MobileCooperativeOffice zhangxin$ pod update --no-repo-update
zhangxindeMacBook-Pro:MobileCooperativeOffice zhangxin$ pod install --verbose --no-repo-update
5、遍历UItableviewcell的子view,比如一个button
UITableViewCell *currentCell = [_dataListTableView cellForRowAtIndexPath:indexPath];
for (UIView *btn in currentCell.contentView.subviews) {
if ([btn isKindOfClass:[UIButton class]]) {
[self btnInCellTapped:(UIButton *)btn];
}
}