1.取摸除数为0,存在内存泄露
NSLog(@"%d",6%0); //结果:8409152
2.UIButton 的使用相关
设置UIButton的文字显示位置、字体的大小、字体的颜色
btn.frame = CGRectMake(x, y, width, height);
[btn setTitle: @"search" forState: UIControlStateNormal];
//设置按钮上的自体的大小
//[btn setFont: [UIFont systemFontSize: 14.0]]; //这种可以用来设置字体的大小,但是可能会在将来的SDK版本中去除改方法
//应该使用
btn.titleLabel.font = [UIFont systemFontOfSize: 14.0];
[btn seBackgroundColor: [UIColor blueColor]];
按钮的属性使用
btn =[[UIButton alloc]initWithFrame:CGRectMake(5,5,200,40)];
//这样初始化的button,文字默认颜色是白色的,所有如果背景也是白色的话,是看不到文字的,
btn.contentHorizontalAlignment=UIControlContentHorizontalAlignmentLeft ;//设置文字位置,现设为居左,默认的是居中
[btn setTitle:@“title”forState:UIControlStateNormal];// 添加文字
有些时候我们想让UIButton的title居左对齐,我们设置
btn.textLabel.textAlignment = UITextAlignmentLeft
是没有作用的,我们需要设置
btn.contentHorizontalAlignment = UIControlContentHorizonAlignmentLeft;
但是问题又出来,此时文字会紧贴到做边框,我们可以设置
btn.contentEdgeInsets = UIEdgeInsetsMake(0,10, 0, 0);
使文字距离做边框保持10个像素的距离。
=======================================================
设置UIButton上字体的颜色设置UIButton上字体的颜色,不是用:
[btn.titleLabel setTextColor:[UIColorblackColor]];
btn.titleLabel.textColor=[UIColor redColor];
而是用:
[btn setTitleColor:[UIColor blackColor]forState:UIControlStateNormal];
3.characterAtIndex:i 这个方法的作用是
返回索引i 所在UniCode 字符 而不是字串
所以应该是
unichar strxmlchar=[strcs characterAtIndex:i];
接收字符
并且format要以%C(大写字母C)的形式
NSString *strcs=@"猜猜看";
NSString *str=@"";
for(int i=0;i<strcs.length;i++){
unichar strxmlchar=[strcs characterAtIndex:i];
str=[NSStringstringWithFormat:@"%C",strxmlchar];
NSLog(@"%C",strxmlchar);
}
另一种方法
for(int i=0;i<strcs.length;i++){
str=[strcs substringWithRange:NSMakeRange(i, 1)];
NSLog(@"%@",str);
if ([str isEqualToString:@"看"]) {
NSLog(@"%@是指定字符",str);
}
}
4.使用UITableViewCell 的注意点:在使用方法- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
创建cell时,在这个方法中使用 :如 DLog(@"%@",NSStringFromCGRect(self.frame)); 结果为{{0, 0}, {320, 44}} 及在设置cell的子控件时,注意,即使运行在iPhone 6 plus ,为375x667的屏幕时,显示结果仍为打印结果。如果使用self.frame.size.width,设置需注意,可以使用[UIDevice currentDevice].bounds 得到屏幕的宽度设置。设置子控件的尺寸,可以在 layoutSubviews 方法中;
5.XCode 异常崩溃的处理
调度技巧一(全局断点):
程序在崩溃的时候,xcode经常没有给出准确的堆栈信息,而是定位在了main方法里, 其实xcode只要装简单设置一下,就能准确给出堆栈信息了, 打开xcode左边的Breakpoint Navigator (view - Navigator -show Breakpoint,可以选择 Navigator) ,点击下面的+号添加一个Exception Breakpoint,可以选择 All, 然后再运行试试,Crash后,就会在在抛出异常的时候停下来了。
调度技巧二(坏内存访问,查看僵尸对象):
Crash,EXC_BAD_ACCESS (坏内存访问),这个比较头疼,因为Crash的时候,可能是比较早之前的某个变量释放了,现在访问时出问题。Console里也没显示什么日志。开Scheme选项选择Edit(product) Scheme然后按图勾上Enable Zombie Objects(僵尸对象) 和Malloc Stack(分配的栈内存)那两项,注意点:记住一般只有在定位EXC_BAD_ACCESS时候才勾选,别有事没事都勾上。
重新运行程序,如果是到Exception Breakpoint处停止了,可以在Console中输入:c(continue)按回车继续跑,直到Crash。看下Console是不是有跟SIGABRT类似的错误信息日志了。
如 果还没有日志,在Console中输入 po $eax $eax标志出错的地方,适用模拟器,真机用$r0(话说EXC_BAD_ACCESS这种 错误模拟器定位就行),还可以输入比如:po [$eax name] po [$eax reason]等指令查看错误其他信息(注意方括号后 没分号的)。
注意:
开发时,去掉Enable Zombie Objects,对象不会销毁
6.属性注释,开发时,不希望注释占多行,在属性后面写注释,不提示,以下小技巧:
@property(nonatomic,strong)UITableView* tableView; /**< 注释 */ //在使用的时候,有注释,只需加个<
7.//这种方法定义的枚举,在使用时,可以检查枚举的类型
typedef NS_ENUM(NSInteger, ZBNetworkStatu)
{
ZBNetworkStatuNoNetwork = 0
};
typedef enum {
FestivalSpring = 0
}Festival;
8.textField 的占位文字设置,使用了kvc
textField.placeholder = @"good";
[textField setValue:[UIColor greenColor] forKeyPath:@"_placeholderLabel.textColor"];
[textField setValue:[UIFont boldSystemFontOfSize:14] forKeyPath:@"_placeholderLabel.font"];
9.[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]; 设置状态栏的背景色 首先需要停止使用View controller-based status bar appearance。在project target的Info tab中,插入一个新的key,名字为View controller-based status bar appearance,并将其值设置为NO。
10.调节UILabel的行间距
- (NSAttributedString *)attributeText:(NSString *)text
{
NSMutableAttributedString *attributeText = [[NSMutableAttributedString alloc] initWithString:text];
NSMutableParagraphStyle *paragraph = [[NSMutableParagraphStyle alloc] init];
paragraph.lineSpacing = 10;
[attributeText addAttribute:NSParagraphStyleAttributeName value:paragraph range:NSMakeRange(0, attributeText.length)];
return attributeText;
}
扩展:
iOS9以后出了平方字体,支持6种字重,适合浏览使用,详情!PingFangSC,
注意:
iOS8及以下不支持平方字体,加入字体,会增大ipa的大小,我导入的字体80.4M打出的包,差不多80M左右。
11.Xcode的常用快捷键:
- command + shift + j 快速定位到当前打开的文件的位置
- command + shift + 0 打开文档帮助
- command + . 暂停模拟器
- command + B 编译代码
- com + R 运行
- command +shift +K clean 项目
- command + shift +o 查找文件
- command + shift + F 查找
- cmd + F 查找当前文件
- options + 左键点击 文件可以分栏显示
- command + 1方法的所有调用者和被调用者
12.opaque告诉系统如何组合你的视图。如果你的视图的内容是完全不透明的,因此不显示任何底层视图的内容,请将此属性设置为“是”。设置此属性可以提高性能,可以消除不必要的合成操作。
UIView opaque
The opaque property tells the system how it should composite your view. Set this property to YES if your view’s content is fully opaque and therefore does not reveal any of the underlying view’s content. Setting this property to YES improves performance by eliminating unnecessary compositing operations.
13.网络压力测试
ab -n 10 -c 1 https://build.misfit.com/cloudapi/resource/v2/
14.iOS9 使用的URLScheme 必须加入到白名单 在你的应用的plist文件里的LSApplicationQueriesSchemes键值下添加。
参考
15.图片的字符串转UIImage,切记 此处必须判断字符串是否为空,不然程序crash,
[_NSPlaceholderData initWithBase64EncodedData:options:]: nil data argument : NSString *imageStr = responseObj[@"binary"];
if(imageStr) {
NSData *imageData = [[NSData alloc] initWithBase64EncodedData:[imageStr dataUsingEncoding:NSDataBase64Encoding64CharacterLineLength] options:0];
if([imageData isKindOfClass:[NSData class]]) {
img = [UIImage imageWithData:imageData];
}
}
16.alwaysBounceVertical 垂直位置上决定collectionView 是否达到内容的结束位置可以拖动。(开发技巧-加载数据失败,下拉刷新重新加载)。
collectionView.alwaysBounceVertical = YES;
17.私有api 检查工具
18.去掉UITextView的放大功能 :textViewShouldBeginEditing: txtView.editable一定要设置成YES
//clear UITextView copy cut paste
- (BOO)canPerformAction:(SEL)action withSender:(id)sender
{
if([UIMenuController sharedMenuController]) {
[UIMenuController sharedMenuController].menuVisible = NO;
}
return NO;
}
选择/复制的菜单、放大镜全部禁用
- (BOOL)canBecomeFirstResponder
{
return NO;
}
19.NSData 和UIImage 的相互转换
//data -> 转换成 UIImage
NSData *imageData = [NSData dataWithContentsOfFile:imagePath];
UIImage *image = [UIImage imageWithData:imageData];
//UIImage -> UIData
UIData *imageData = UIImagePNGRepresentation(self.image);
UIImageJPEGRepresentation(strongSelf.shareImage,1.0)