在学习和调试iPhone 界面或者某个控件的过程中,递归地dump出UIView是一个了解界面结构很有效的方法。这样不仅可以更好地发现问题,还可以定制某些系统的标准控件。要解决这类问题,很自然会想到递归函数。实现如下:
void dumpViews(UIView* view, NSString *label, NSString *indent) {
Class klass = [view class];
NSString *classDescription = getFullClassDescription(klass);
if ([label compare:@""] == NSOrderedSame)
NSLog(@"%@ %@", classDescription, NSStringFromCGRect(view.frame));
else
NSLog(@"%@ %@ %@", label, classDescription, NSStringFromCGRect(view.frame));
for (NSUInteger i = 0; i < [view.subviews count]; i++)
{
UIView *subView = [view.subviews objectAtIndex:i];
NSString *newIndent = [[NSString alloc] initWithFormat:@" %@", indent];
NSString *newLabel = [[NSString alloc] initWithFormat:@"%@%d:", newIndent, i];
dumpViews(subView, newLabel, newIndent);
[newLabel release];
[newIndent release];
}
}
其中getFullClassDescription是用来获取某个类的继承关系描述:
NSString* getFullClassDescription(Class klass) {
NSString *description = [klass description];
while ([klass superclass])
{
klass = [klass superclass];
description = [description stringByAppendingFormat:@":%@", [klass description]];
}
return description;
}
利用dumpViews对某应用的主窗体进行“偷窥”后输出结果如下:
UIWindow:UIView:UIResponder:NSObject {{0, 0}, {320, 480}}
0: UILayoutContainerView:UIView:UIResponder:NSObject {{0, 0}, {320, 480}}
0: UINavigationTransitionView:UIView:UIResponder:NSObject {{0, 0}, {320, 480}}
1: UINavigationBar:UIView:UIResponder:NSObject {{0, 0}, {320, 44}}
0: UINavigationItemView:UIView:UIResponder:NSObject {{160, 8}, {0, 27}}
分享到:
相关推荐
Jenkins启动脚本,对java服务的jar启停。 JVM参数: JAVA_OPTS="-Xms512M -Xmx1024M -Xss256K -XX:+UseAdaptiveSizePolicy -XX:+UseParallelGC -XX:+...XX:ErrorFile=$HS_ERR_PATH -XX:HeapDumpPath=$HEAP_DUMP_PATH
dump1090-fa的旧dump1090 Web界面 安装 sudo bash -c "$(wget -q -O - https://raw.githubusercontent.com/wiedehopf/dump1090-retro-html/master/install.sh)" Web界面的URL 您可以在Raspberry Pi的IP地址上找到...
- name : Postgres Dump Backup uses : tj-actions/pg-dump@v1 with : database_url : " postgres://test_user:test_user_password@localhost:5432/testdb " path : " backups/backup.sql " options : " -O ...
ORACLE 11G导入到10G的命令,从11G数据库导出,可导入到10G数据库。
(date).log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./dump-PODIP− (date).hprof ALTER TABLE Content ADD FULLTEXT INDEX title_ft (title) WITH PARSER ngram; docker run --name some-mysql -e ...
NULL 博文链接:https://bri-robby.iteye.com/blog/2327887
jmap -dump:format=b,file=heapdump.hprof Pid;生成一个关于此进程的堆栈使用情况;使用工具做出对比
并行fastq转储并行fastq-dump包装器为什么和如何即使您已经拥有更快的资源(网络,IO,CPU),即使您已经下载了sra文件,NCBI fastq-dump有时也会非常慢。 该工具通过将工作划分为多个线程来加快过程。 这是可能的,...
etcd转储 命令行实用程序,用于转储/恢复etcd。...// Reads in the etcd_dump.json and restores it ' s values to the DB 帮助 : $ etcd-dump Usage: etcd-dump.js [options] [command] Comma
use Jar::Manifest qw(Dump Load); # Read a Manifest my $manifest_str = <<"MANIFEST"; Manifest-Version: 1.0 Created-By: 1.5.0_11-b03 (Sun Microsystems Inc.) Built-By: JAPH Name: org/myapp/foo/ ...
go run go-mysql-dump-to-gdrive --help 参数 -db="": 数据库名称 -db-host="localhost":MySql 转储主机的名称 -db-user="": 你的 MySql dump USER 的名字 -dump-all=false: 如果设置脚本转储所有 MySql 数据库 -...
官网一直下载不了,找这个找了好久,因为生成的dump文件太大不得不用linux生成报告! 首先,dump生成: 配置jvm参数-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/mat/ java_pid1089.hprof 手工直接导,...
-- phpMyAdmin SQL Dump -- version phpStudy 2014 -- http://www.phpmyadmin.net -- -- 主机: localhost -- 生成日期: 2017 年 12 月 08 日 14:02 -- 服务器版本: 5.5.40 -- PHP 版本: 5.3.29 SET SQL_MODE="NO_...
转储监视器字表根据 Dump Monitor Bot 发现的内容创建的词表
vscode-ms-access-dump:MS Access转储格式的语法突出显示
大数据导出ExcelJVM参数-Xmx500m-Xms500m-XX:+HeapDumpOnOutOfMemoryError-XX:HeapDumpPath=./excelexportdemo.hprof-Xloggc:./gc-%t.log-XX:+PrintGCDetails-XX:+PrintGCDateStamps-XX:+PrintGCTimeStamps-XX:+...
dump1090-工具使用dump1090进行操作的随机脚本YMMV,可能都是可怕的错误和错误。
docker build -t dump-server-migrations:latest -f migrations.Dockerfile . 运行图像: docker run -it --rm --network host dump-server-migrations:latest 如果要更改连接属性,可以通过以下任一方法进行: ...
如果您安装了 ,则可以通过运行以下命令从源代码安装 rabbitmq-dump-queue: go get github.com/dubek/rabbitmq-dump-queue rabbitmq-dump-queue可执行文件将在$GOPATH/bin目录中创建。 用法 倾倒的队列中的第一个...
pg_dump-to-s3:自动将PostgreSQL备份转储并存档到Amazon S3