iOS开发小技巧

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的常用快捷键:

  1. command + shift + j 快速定位到当前打开的文件的位置
  1. command + shift + 0 打开文档帮助
  2. command + . 暂停模拟器
  3. command + B 编译代码
  4. com + R 运行
  5. command +shift +K clean 项目
  6. command + shift +o 查找文件
  7. command + shift + F 查找
  8. cmd + F 查找当前文件
  9. options + 左键点击 文件可以分栏显示
  10. 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)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容