iOS开发笔记(六)

前言

专注、坚持,是优良的品格。

正文

1、cell和cell.contentView 的区别

在给UITableViewCell添加视图的时候,我们有以下两种做法:

  • [cell addSubview: subView]
  • [cell.contentView addSubview: subView]

有何不同?
先看看以下两个tableView模式的视图结构:


正常模式

编辑模式

[cell addSubview: subView]添加的subView,不会随着模式改变而改变位置;

2、Block修改外部变量

先看看一段简单的代码,看看NSLog会输出什么?代码是否存在问题?

typedef void(^TestBlock)();
@implementation ViewController {
    int a;
    NSString *b;
}
- (void)viewDidLoad {
    [super viewDidLoad];
    a = 0;
    b = @"0";
    int c = 0;
    TestBlock block = ^() {
        a = 100;
        b = @"100";
        c = 100;
    };
    block();
    NSLog(@"%d %@ %d", a, b, c);
}

问题1:在Block中修改栈内临时变量,需要添加__block关键字声明;
问题2:在Block中修改@implementation 中声明的属性变量,也需要添加Weak-Strong的声明;

Block的执行时机未定,所以无法直接修改栈内临时变量;如果发现在栈外调用,会触发指针异常;故而需要添加__block声明,使用时把变量copy到堆上;
同理,Block可能会在VC的声明周期之外执行,所以需要在block外面添加weakSelf的声明,避免Block强引用self导致VC无法回收;同时在Block内部添加StrongSelf的声明,避免Block在执行过程中VC被回收;

在Block内外添加NSLog(@"%p %p %p", &a, &b, &c);,可以而查看调用前后的地址变化;
如果还想深入了解,可以入手一本《Objective-C高级编程 iOS与OS X多线程和内存管理》

3、多参数方法的调用

通过performSelector无法调用一个多参数的方法,可以使用NSInvocation
首先通过instanceMethodSignatureForSelector获取NSMethodSignature,再通过invocationWithMethodSignature新建NSInvocation,最后设置好target和selector以及参数数组,最后调用invoke。

You should use the invocationWithMethodSignature: class method to create NSInvocation objects; you should not create these objects using alloc and init.
不会对参数进行retain操作,开发者要保证调用期间的参数生命周期。

这种调用方式比较复杂,如果能修改被调用的方法,可以采用把参数设置成NSDictionary或者自定义的数据结构体;也可以把方法的调用采用Block的方式。

4、Xcode 无法在Debug中输出变量信息

Xcode在真机调试时,无法通过LLDB指令打印变量信息,得到的错误信息是:
Errored out in Execute, couldn't PrepareToExecuteJITExpression

  • 可能1、工程编译目标类型是release而不是debug,在target设置中改为debug;
  • 可能2、Xcode和iOS版本不一致,对齐版本;
  • 可能3、系统问题,重启电脑和iOS;
  • 可能4、打开schemes,Run选项,关闭Address Sanitizer;

5、Xcode 内存暴涨

Xcode8内存占用暴涨到60G,同时SVN占用7G多;



这个状况在今年使用SVN同步代码之后首次出现,因为SVN拉取最新的代码后Xcode会进行Index操作,怀疑是svn进程异常导致Xcode的Index逻辑异常。
在GG上查找多次,没有找到类似的问题的解决方案。
最后自己的解决办法是:打开Xcode的偏好设置,选择Account,删除Repo下面的svn库,命令行执行一遍svn cleanup,重新添加svn的Repo。

6、Core Data 真机数据查看

工作需要,想查看真机上面的CoreData的数据库数据。
真机联Xcode,打开Xcode的Devices(Shift+Command+2),下载对应App的沙盒数据。找到CoreData对应的数据库文件,一般是ProjectName.sqlite。
AppStore下载SQLPro for SQLite Read_Only,然后用其查看。

CodeReview

代码写的好不好,几个评判标准:
1、稳健性;
2、扩展性;
3、可读性;
总结一起就是,异常分支有处理,同事阅读方便,增改逻辑便捷;
**
一个对象中私有方法和公有方法的泾渭分明,并且按照具体的功能模块进行聚合,用
category离散化代码;**
善用继承机制,每个VC都要有通用的VC以方便后期的统一处理;
Notification的声明中,要注明发起时机,发送/接受者,参数定义;
一个单例类如果在使用中存在状态,多数情况是多个分支入口调用异步操作,如下


这种情况,最好使用闭包的回调机制,而不是采用状态。(因为单个状态在多次调用过程中会被重置,多个状态逻辑混乱)

总结

在过去的一段时间里,学习新的工作制度,�融入新的环境。

一个拥有优秀的学习方法和自我控制能力的人,在每个行业都能焕发出自己的光彩。

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

推荐阅读更多精彩内容