打印视图层级

这个相信很多人都会了,是ta是ta就是ta recursiveDescription

用法大概就是如下

1
2
3
po [self.view recursiveDescription]

po [[[UIApplication sharedApplication] keyWindow] recursiveDescription]

Expression大法

本篇Blog基本会围绕这个命令展开,这个命令是一个神奇的命令。
由于本人才疏学浅,并不知道该怎么介绍这个命令,只能一言以蔽之,他的功能是 执行一个表达式

用这个命令基本上就可以玩出花了,普通的方法函数都可以在LLDB调用了。

UI样式更新

首先本人钟爱使用Xcode自带的Debug View Hierarchy功能,于是讲一下如何在该Debud过程中动态修改UI。

简述一下过程就是:获取对象 -> 对对象调用方法(更改样式) -> 渲染

  1. 获取对象
    选中 需要修改的控件
    查看 右侧栏中的Object inspector,这里你能看到一个Address属性,有了这个可谓成功了一半,接下来就是coding。
    这里先假设这个Address是0x7fcef0c19290
  2. 对对象调用方法(更改样式)
    比如说我想要改背景颜色,可以这样e (void)[0x7fcef0c19290 setBackgroundColor:[UIColor blueColor]]。
    这是比较随意直接的一种写法,也可以一步一步写

    1
    2
    3
    4
    5
    e UIView * $myView = (UIView *)0x7fcef0c19290
    
    e $myView.backgroundColor = [UIColor yellowColor]
    //下面这句和上一句的意思一样,你懂得
    //e (void)[$myView setBackgroundColor:[UIColor yellowColor]]
  3. 渲染
    然后到这里,你会发现并没什么卵用,是的,还差最后一步,渲染。
    e (void)[CATransaction flush]
    邦邦,是不是可以看到背景颜色变掉了

以上可以在第2步中玩出花来,就看你怎么玩了

强行刷新约束

于是我就要讲述一下我玩的恶趣味,能改背景颜色等基础样式觉得不过瘾,我就是想能改约束玩玩。

首先很天真,把Masonry的代码直接打进去

1
2
3大专栏  LLDB奇巧淫技span>
e (void)[$view mas_updateConstraints:^(MASConstraintMaker *make) {
make.height.equalTo(@20);
}];

LLDB妥妥的告诉我诸如unrecognize、undefined等信息。

于是好吧,我想用原生的约束方法总行了吧

1
e NSLayoutConstraint * $constraint = [NSLayoutConstraint constraintWithItem:$view attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeHeight multiplier:1.0f constant:100.0f]

结果LLDB说我不认识NSLayoutAttributeHeight、NSLayoutRelationEqual,我次奥,好的算你横,我把枚举对应的数值查了出来。

1
e NSLayoutConstraint* $constraint = [NSLayoutConstraint constraintWithItem:$test attribute:8 relatedBy:0 toItem:nil attribute:8 multiplier:1 constant:80.0f]

ok,这个约束变量总算是生成了,不容易,然后就是加约束了

1
e (void)[$view addConstraint:$constraint]

好吧,加是加上去了,但是妥妥的约束冲突啊,本来就已经有一个高度约束了呀,于是继续
获取原来的约束列表,然后新建变量指向原有的那个约束,删除之,搞定。

1
2
3
4
po [$view constraints]
e NSLayoutConstraint* $oldConstraint = (NSLayoutConstraint*)0x6080000b34a0
e (void)[$test removeConstraint:$oldConstraint]
e (void)[CATransaction flush]

然后通过指向新约束的指针可以愉快的改constant

1
2
e $constraint.constant = 20
e (void)[CATransaction flush]

当然如果你只是要修改约束,可以直接从新建一个变量指向[$view constraints]里的某个约束,然后愉快的修改,不用这么麻烦删掉原来的、创建新的、加上新约束,简直妈的智障

吐槽

这个代码提示几乎不支持啊,是我使用方式不对吗????

引用

ObjC 中国

LLDB奇巧淫技的更多相关文章

  1. iOS开发的一些奇巧淫技(转载)

    iOS开发的一些奇巧淫技 http://www.cocoachina.com/ios/20141229/10783.html iOS开发的一些奇巧淫技2 http://www.cocoachina.c ...

  2. octave之奇巧淫技向量化计算实现寻找样本点所属聚类下标

    前面有文章提到过,K-means算法,第一步骤是找出样本点的的所属聚类.下面用两种方式实现,一种是普通的循环,一种是完全向量化计算. 假设 : X 是m×n样本矩阵,其每一行是一个样本,m表示样本数目 ...

  3. [异常解决] 奇巧淫技——VirtualBox中的linux无显示启动,并在win7上远程控制

    楼主是资深技术宅(癖),由于感觉手上的老笔记本太卡,遂狠心买了个性能至强的主机同时配了个投影仪(满足躺着打代码的意淫场景).但是体验了大概一个月发现还是坐着打代码舒服,但是如下图坐着打代码总是要抬头看 ...

  4. iOS开发的一些奇巧淫技

    TableView不显示没内容的Cell怎么办? 类似这种,我不想让下面那些空的显示. 很简单. self.tableView.tableFooterView = [[UIView alloc] in ...

  5. C基础 那些年用过的奇巧淫技

    引言 - 为寻一颗明星 为要寻一颗明星 徐志摩 1924年12月1日<晨报六周年纪念增刊> 我骑著一匹拐腿的瞎马, 向著黑夜里加鞭:—— 向著黑夜里加鞭, 我跨著一匹拐腿的瞎马.// 我冲 ...

  6. 介绍一个C++奇巧淫技

    你能实现这样一个函数吗:   MyType type;   HisType htype;   serialize_3(11, type, htype);   serialize_4(type, hty ...

  7. iOS开发的一些奇巧淫技2

    能不能只用一个pan手势来代替UISwipegesture的各个方向? - (void)pan:(UIPanGestureRecognizer *)sender { typedef NS_ENUM(N ...

  8. Windows的奇巧淫技(为什么GIF显示不出来??)

    谁的电脑里没点小秘密?东藏西藏到最后自己都找不到了有木有?今天教大家个隐藏文件的高招: 将任意文件隐藏到图片中!怎么样?再也不用建什么「马列主义哲学」的文件夹啦!

  9. powerdesigner奇淫技

    在日常开发中数据库的设计常常需要建立模型,而powerdesigner是个不错的选择.但很多时候用powerdesigner生成模型后再去创建表结构,会觉得烦和别扭.那么能不能数据库表建好后再生成模型 ...

随机推荐

  1. 关于电脑识别不出自己画的板子上的USB接口问题

    现在在画一个Cortex-A5的底板,现在已经完成,正在测试各个模块,发现USB插上后,电脑提示报错,如下: 网上查了很多,有的说是配置问题,有的说是走线问题,首先配置肯定没问题,因为同一台电脑,在买 ...

  2. 14 微服务电商【黑马乐优商城】:day06-了解vue-router和webpack的使用

    本项目的笔记和资料的Download,请点击这一句话自行获取. day01-springboot(理论篇) :day01-springboot(实践篇) day02-springcloud(理论篇一) ...

  3. Educational Codeforces Round 76 (Rated for Div. 2)E(dp||贪心||题解写法)

    题:https://codeforces.com/contest/1257/problem/E 题意:给定3个数组,可行操作:每个数都可以跳到另外俩个数组中去,实行多步操作后使三个数组拼接起来形成升序 ...

  4. TPO9-2Reflection in Teaching

    Teachers, it is thought, benefit from the practice of reflection, the conscious act of thinking deep ...

  5. python学习——list

    list 序列是Python中最基本的数据结构.序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推.Python有6个序列的内置类型,但最常见的是列表和元组 ...

  6. 大道至简伪代码读后感java为代码形式

    //愚公移山 import.java.大道至简.*; import.java.愚公移山.*; public class yishan //定义一个名为yishan的类 {//类定义的开始 public ...

  7. iOS补位动画、沙漏效果、移动UITableViewCell、模拟贪吃蛇、拖拽进度等源码

    iOS精选源码 JHAlertView - 一款黑白配色的HUD之沙漏效果 继承UIButton的自定义按钮SPButton 用递归算法实现iOS补位动画 iOS 长按移动UITableViewCel ...

  8. 场景实践篇二:Nginx作为缓存

    cd /etc/nginx/conf.d/ vim cache_test.conf

  9. G - 旅行的意义(概率DP) (DAG图的概率与期望)

    为什么有人永远渴望旅行,或许就因为,巧合和温暖会在下一秒蜂拥而至吧. 一直想去旅游的天天决定在即将到来的五一假期中安排一场环游世界的旅行.为此,他已经提前查阅了很多资料,并准备画一张旅游路线图.天天先 ...

  10. 部署企业本地yum源及源码包安装

    YUM命令 yum list //列出每个软件包(包括未安装和已安装) rpm -q repolist //列出所以仓库名称 info //查看软件信息 rpm -qi install //安装 rp ...