首页 文章 精选 留言 我的

精选列表

搜索[网站开发],共10000篇文章
优秀的个人博客,低调大师

iOS 开发之字符串转图片

UIFont *font = [UIFont fontWithName:@"Menlo" size:12 * 2]; UIImage *wenbenImage = [self imageWithString:Str font:font width:576 textAlignment:NSTextAlignmentLeft]; - (UIImage *)imageWithString:(NSString *)string font:(UIFont *)font width:(CGFloat)width textAlignment:(NSTextAlignment)textAlignment { NSDictionary *attributeDic = @{NSFontAttributeName:font}; CGSize size = [string boundingRectWithSize:CGSizeMake(width, 10000) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingTruncatesLastVisibleLine attributes:attributeDic context:nil].size; if ([UIScreen.mainScreen respondsToSelector:@selector(scale)]) { if (UIScreen.mainScreen.scale == 2.0) { UIGraphicsBeginImageContextWithOptions(size, NO, 1.0); } else { UIGraphicsBeginImageContext(size); } } else { UIGraphicsBeginImageContext(size); } CGContextRef context = UIGraphicsGetCurrentContext(); [[UIColor whiteColor] set]; CGRect rect = CGRectMake(0, 0, size.width + 1, size.height + 1); CGContextFillRect(context, rect); NSMutableParagraphStyle *paragraph = [[NSMutableParagraphStyle alloc] init]; paragraph.alignment = textAlignment; NSDictionary *attributes = @ { NSForegroundColorAttributeName:[UIColor blackColor], NSFontAttributeName:font, NSParagraphStyleAttributeName:paragraph }; [string drawInRect:rect withAttributes:attributes]; UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return image; }

优秀的个人博客,低调大师

Linux系统下开发常用命令

文件目录中查找函数和文件 find . | xargs grep func_name find -name "*.mk" | xargs grep file_name.c 持续显示某个文件内容,在当前操作窗口持续更新 tail -f boot_info.log 打开某个文件并查找关键字 less ./frame/fei/fe_nse/nse_fsm.c grep FEI_FEVFP_HEARTBEAT_SendPktProc.c ./ -r 从so中找是否编进去某个函数 nm libfeife.so | grep FE588X_HODP_TXPKT_Buf2HwBuf 1."-A" 列出符号名的时候同时显示来自哪个文件 2."-a" 列出所有符号,这将会把调试符号也列出来,默认情况下不会被列出; 3."-l",列出符号在源代码中的行号; 4."-n",根据符号的地址来排序,默认是按符号名称的字母顺序来排序的; 5."-u",只列出未定义符号; 列出so中所有函数 nm -D XXX.so objdump -tT XXX.so 查看命令使用历史记录,并用less分页显示 history | less Linux上压缩文件 tar -zcvf /tmp/etc.tar.gz /etc <==打包后,以gzip压缩 tar -jcvf /tmp/etc.tar.bz2 /etc<==打包后,以bzip2压缩 当前目录下各文件夹大小 du -h --max-depth=1 当前目录查找某字符串 grep ./ -nr "key_string" 目录下查找keystring文件 grep "key_string" ./r 文件下查找yyy关键字 cat xxx | grep yyy xxx Linux下查看操作系统是多少位的? uname -a Linux下查看操修行系统是CentOS还是Ubuntu等 lsb_release -a Linux查看物理CPU个数、核数、逻辑CPU个数 总核数 = 物理CPU个数 X 每颗物理CPU的核数 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数 查看物理CPU个数 cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l 查看每个物理CPU中core的个数(即核数) cat /proc/cpuinfo| grep "cpu cores"| uniq 查看逻辑CPU的个数 cat /proc/cpuinfo| grep "processor"| wc -l 查看CPU信息(型号) cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c Linux下查看线程的资源占用情况 1 先用ps + grep找出该死的进程pid,比如 30420 2 top -H -p 30420,(top然后shift+H可以看出某个线程)所有该进程的线程都列出来了。看看哪个线程pid占用最多,然后将这个pid转换为16进制,如 44bf,注意要小写 3 执行top命令后,输入1 可查看各cpu核单独占用率,top显示的是各个核加起来的总和; 4 输入f 出现列,通过输入行前首字母,选择显示列; Linux下查看进程下所有线程的调用栈 pstack -pid (进程ID) Linux使用tcpdump抓取网络数据包 ifconfig 查看网卡名字 tcpdump [-i 网卡] -nnAX '表达式' -i:interface 监听的网卡。 -nn:表示以ip和port的方式显示来源主机和目的主机,而不是用主机名和服务。 -A:以ascii的方式显示数据包,抓取web数据时很有用。 -X:数据包将会以16进制和ascii的方式显示。 表达式:表达式有很多种,常见的有:host 主机;port 端口;src host 发包主机;dst host 收包主机。多个条件可以用and、or组合,取反可以使用!,更多的使用可以查看man 7 pcap-filter。 1、监听网卡eth0 $ tcpdump -i eth0 2、监听指定协议的数据 $ tcpdump -i eth0 -nn 'icmp' 3、监听指定的主机 $ tcpdump -i eth0 -nn 'host 192.168.1.231' $ tcpdump -i eth0 -nn 'dst host 192.168.1.231' 4、监听指定端口 $ tcpdump -i eth0 -nnA 'port 80' 5、监听指定主机和端口 $ tcpdump -i eth0 -nnA 'port 80 and src host 192.168.1.231' 6、抓包重定向使用输出在Windows上使用wireshark分析 $ tcpdump -i eth0 -nnA 'port 80' >>test.pncp Linux下反汇编 linux下objdump命令常见用法举例: objdump -x obj:以某种分类信息的形式把目标文件的数据组成输出;<可查到该文件的的所有动态库> objdump -t obj:输出目标文件的符号表() objdump -h obj:输出目标文件的所有段概括() objdump -j ./text/.data -S obj:输出指定段的信息(反汇编源代码) objdump -S obj:输出目标文件的符号表() 当gcc -g时打印更明显 objdump -j .text -Sl stack1 | more -S 尽可能反汇编出源代码,尤其当编译的时候指定了-g这种调试参数时, 效果比较明显。隐含了-d参数。 -l 用文件名和行号标注相应的目标代码,仅仅和-d、-D或者-r一起使用 使用-ld和使用-d的区别不是很大,在源码级调试的时候有用,要求 编译时使用了-g之类的调试编译选项。 -j name 仅仅显示指定section的信息 如何使用linux下objdump命令对任意一个二进制文件进行反汇编? 可以使用如下命令: objdump -D -b binary -m i386 a.bin -D表示对全部文件进行反汇编,-b表示二进制,-m表示指令集架构,a.bin就是我们要反汇编的二进制文件 objdump -m可以查看更多支持的指令集架构,如i386:x86-64,i8086等 另外上面的所有objdump命令的参数同样适用于arm-linux-objdump。 同时我们也可以指定big-endian或little-endian(-eb或-el),我们可以指定从某一个位置开始反汇编等。 objdump命令是Linux下的反汇编目标文件或者可执行文件的命令,它还有其他作用,下面以ELF格式可执行文件test为例详细介绍: objdump -f test 显示test的文件头信息 objdump -d test 反汇编test中的需要执行指令的那些section objdump -D test 与-d类似,但反汇编test中的所有section objdump -h test 显示test的Section Header信息 objdump -x test 显示test的全部Header信息 objdump -s test 除了显示test的全部Header信息,还显示他们对应的十六进制文件代码 linux 命令替换文件夹下所有文件指定字符串为 比如,要将目录/modules下面所有文件中的zhangsan都修改成lisi,这样做 sed -i "s/zhangsan/lisi/g" `grep zhangsan -rl /modules` 解释一下: -i 表示inplace edit,就地修改文件 -r 表示搜索子目录 -l 表示输出匹配的文件名 这个命令组合很强大,要注意备份文件。 Linux下查看进程下所有线程的调用栈 lsof(list open files)是一个列出当前系统打开文件的工具。在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,因此通过lsof工具能够查看这个列表对系统监测以及排错将是很有帮助的。 确认系统设置的最大文件句柄数 ulimit -a 统计系统中当前打开的总文件句柄数 lsof|awk '{print $2}'|wc -l 根据打开文件句柄的数量降序排列,其中第二列为进程ID: lsof|awk '{print $2}'|sort|uniq -c|sort -nr|more

优秀的个人博客,低调大师

Android应用开发—setResult()的调用时机

本文转载自setResult()的调用时机,此处做了重新的排版,只是感觉markdown的排版比较好看些,侵删。 今天遇到这样一个问题,我在Activity-A中用startActivityForResult()方法启动了Activity-B,并且在B中通过setResult()方法给A返回值,由于某些原因不能在setResult()之后立刻调用finish()函数,只能通过用户按Back键自己退出到A。按理说从B退出回到Aactivity-A过程中,A中的 onActivityResult() 应该被调用, 可是通过log发现,整个操作过程中 onActivityResult() 始终没有被调用。 前后研究了半天才发现 是 setResult() 的调用时机不对造成的,因为在我是在B的onStop() 函数中调用setResult()函数的,这个时候的seResult是没有任何意义的,因为已经错过了A onActivityResult() 的调用时机。 因为在 B 退回 A过程中,执行过程是 B---onPause A---onActivityResult A---onRestart A---onStart A---onResume B---onStop B---onDestroy 从上面过程可以看出,首先是B处于Pause 状态,然后等待A执行 onRestart-> onStart ->onResume,然后才是B 的onStop->onDestroy,而A的 onActivityResult() 需要在B的onPause之后,A的onRestart之前这中间调用,所以B中的setResult()函数应该放在B的onPause之前调用。 另外我试验了一下,如果把setResult()放在 B 的 onPause() 里面调用,结果仍然是无效的。 那么setResult()应该在什么时候调用呢?从源码可以看出,Activity返回result是在被finish的时候,也就是说调用setResult()方法必须在finish()之前。所以在onPause、onStop、onDestroy方法中调用setResult()也有可能不会返回成功,因为这些方法调用不一定是在finish之前的 (why,to find out the reason),当然在onCreate()就调用setResult肯定是在finish之前的,但是又不满足业务需要。 实际使用场景有两个: 按BACK键从一个Activity退出来的,一按BACK,android就会自动调用Activity的finish()方法。 @Override public void onBackPressed() { Log.i(TAG, "onBackPressed"); setResult(Const.LIVE_OK); super.onBackPressed(); } 按点击事件中显式的调用finish() setResult(RESULT_OK); finish(); 执行过程为: B---onBackPressed B---finish B---onPause A---onActivityResult A---onRestart A---onStart A---onResume B---onStop B---onDestroy

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册