LLDB奇巧淫技
打印视图层级
这个相信很多人都会了,是ta是ta就是ta recursiveDescription
用法大概就是如下
1 |
po [self.view recursiveDescription] po [[[UIApplication sharedApplication] keyWindow] recursiveDescription] |
Expression大法
本篇Blog基本会围绕这个命令展开,这个命令是一个神奇的命令。
由于本人才疏学浅,并不知道该怎么介绍这个命令,只能一言以蔽之,他的功能是 执行一个表达式
用这个命令基本上就可以玩出花了,普通的方法函数都可以在LLDB调用了。
UI样式更新
首先本人钟爱使用Xcode自带的Debug View Hierarchy
功能,于是讲一下如何在该Debud过程中动态修改UI。
简述一下过程就是:获取对象 -> 对对象调用方法(更改样式) -> 渲染
- 获取对象
选中 需要修改的控件
查看 右侧栏中的Object inspector
,这里你能看到一个Address
属性,有了这个可谓成功了一半,接下来就是coding。
这里先假设这个Address
是0x7fcef0c19290
对对象调用方法(更改样式)
比如说我想要改背景颜色,可以这样e (void)[0x7fcef0c19290 setBackgroundColor:[UIColor blueColor]]
。
这是比较随意直接的一种写法,也可以一步一步写1
2
3
4
5e UIView * $myView = (UIView *)0x7fcef0c19290 e $myView.backgroundColor = [UIColor yellowColor]
//下面这句和上一句的意思一样,你懂得
//e (void)[$myView setBackgroundColor:[UIColor yellowColor]]渲染
然后到这里,你会发现并没什么卵用,是的,还差最后一步,渲染。e (void)[CATransaction flush]
邦邦,是不是可以看到背景颜色变掉了
以上可以在第2步中玩出花来,就看你怎么玩了
强行刷新约束
于是我就要讲述一下我玩的恶趣味,能改背景颜色等基础样式觉得不过瘾,我就是想能改约束玩玩。
首先很天真,把Masonry
的代码直接打进去
1 |
e (void)[$view mas_updateConstraints:^(MASConstraintMaker *make) { |
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 |
po [$view constraints] |
然后通过指向新约束的指针可以愉快的改constant
1 |
e $constraint.constant = 20 |
当然如果你只是要修改约束,可以直接从新建一个变量指向[$view constraints]
里的某个约束,然后愉快的修改,不用这么麻烦删掉原来的、创建新的、加上新约束,简直妈的智障
吐槽
这个代码提示几乎不支持啊,是我使用方式不对吗????
引用
LLDB奇巧淫技的更多相关文章
- iOS开发的一些奇巧淫技(转载)
iOS开发的一些奇巧淫技 http://www.cocoachina.com/ios/20141229/10783.html iOS开发的一些奇巧淫技2 http://www.cocoachina.c ...
- octave之奇巧淫技向量化计算实现寻找样本点所属聚类下标
前面有文章提到过,K-means算法,第一步骤是找出样本点的的所属聚类.下面用两种方式实现,一种是普通的循环,一种是完全向量化计算. 假设 : X 是m×n样本矩阵,其每一行是一个样本,m表示样本数目 ...
- [异常解决] 奇巧淫技——VirtualBox中的linux无显示启动,并在win7上远程控制
楼主是资深技术宅(癖),由于感觉手上的老笔记本太卡,遂狠心买了个性能至强的主机同时配了个投影仪(满足躺着打代码的意淫场景).但是体验了大概一个月发现还是坐着打代码舒服,但是如下图坐着打代码总是要抬头看 ...
- iOS开发的一些奇巧淫技
TableView不显示没内容的Cell怎么办? 类似这种,我不想让下面那些空的显示. 很简单. self.tableView.tableFooterView = [[UIView alloc] in ...
- C基础 那些年用过的奇巧淫技
引言 - 为寻一颗明星 为要寻一颗明星 徐志摩 1924年12月1日<晨报六周年纪念增刊> 我骑著一匹拐腿的瞎马, 向著黑夜里加鞭:—— 向著黑夜里加鞭, 我跨著一匹拐腿的瞎马.// 我冲 ...
- 介绍一个C++奇巧淫技
你能实现这样一个函数吗: MyType type; HisType htype; serialize_3(11, type, htype); serialize_4(type, hty ...
- iOS开发的一些奇巧淫技2
能不能只用一个pan手势来代替UISwipegesture的各个方向? - (void)pan:(UIPanGestureRecognizer *)sender { typedef NS_ENUM(N ...
- Windows的奇巧淫技(为什么GIF显示不出来??)
谁的电脑里没点小秘密?东藏西藏到最后自己都找不到了有木有?今天教大家个隐藏文件的高招: 将任意文件隐藏到图片中!怎么样?再也不用建什么「马列主义哲学」的文件夹啦!
- powerdesigner奇淫技
在日常开发中数据库的设计常常需要建立模型,而powerdesigner是个不错的选择.但很多时候用powerdesigner生成模型后再去创建表结构,会觉得烦和别扭.那么能不能数据库表建好后再生成模型 ...
随机推荐
- Centos7安装Xrdp远程桌面
Xrdp是Microsoft远程桌面协议RDP的一个开源实现,它允许以图像方式控制远程系统. 测试环境 服务端: CentOS Linux release 7.7.1908 (Core) 客户端: W ...
- 时间API
1. 时间API 我们的时间在java里是long类型的整数,这个整数称之为时间戳(也叫格林威治时间),即从1970-01-01到现在为止所经过的毫秒数,单有这个时间戳是不能准确表达世界各地的时间,还 ...
- Python笔记_第一篇_面向过程_第一部分_6.条件控制语句(if)
Python正如其他语言一样存在两种常用的逻辑判断体(也叫结构化程序设计).所谓逻辑判断体是通过你想要完成的编程思路,通过在逻辑判断体中的相互判断和作用得到你想要的结果.逻辑判断体也叫控制语句,Pyt ...
- php 接口中常用的aes加密
<?php /** * Aes 对称加密 */ class Aes { public $key; public function __construct($key){ $this->key ...
- 嵌入式开发为什么选择C语言作为开发语言?
了解嵌入式开发的朋友们都非常的清楚其核心的开发语言为C语言,C语言在嵌入式开发的过程中占有十分重要的地位,可以说两者之间“你中有我,我中有你”.但是有很多人会想,有那么多的开发语言为什么会单单的选择C ...
- 17.3.13---socket网络套接字介绍--函数和数据类型
1----Socket类型 套接字格式:socket(family,type[,protocal])使用给定的地址族,套接字类型,协议编号(默认为0)来创建套接字 socket类型 描述 socket ...
- android studio 3.2 bundle.gradle 与2.2区别
参考:https://blog.csdn.net/MakerCloud/article/details/82898305
- Codeforces1303F Number of Components
Description link 题意:给一个全\(0\)矩阵,每次支持一个修改,修改不还原(这要是还原了不就成\(A\)题了) 然后询问每一次修改完了当前矩阵的连通块个数 每一个修改的值单调不降 修 ...
- [SDOI2015]道路修建(线段树)
题意:给定2行n列的四连通带权网格图,支持修改边权和查询第[l,r]列的最小生成树 题解:这是一道好题,要么SDOI2019中n=2的20pts怎么会“我抄我自己”?(当然NOIP2018“我抄我自己 ...
- 物联网应用层协议选择和分析--MQTT、CoAP 、HTTP、XMPP、SoAP
MQTT协议 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)最早是IBM开发的一个即时通讯协议,MQTT协议是为大量计算能力有限且工作在低带宽.不 ...