
小技巧
Pandakingli
所在地:北京海淀
从事:iOS移动端开发。
邮箱:pandakingli2022@foxmail.com
展开
-
Git创建一个空的分支
1.创建一个空白的分支的需求在Git中创建分支,是必须有一个父节点的,也就是说必须在已有的分支上来创建新的分支,如果工程已经进行了一段时间,这个时候是无法创建空分支的。但是有时候就是需要创建一个空白的分支。2.解决方法:2.1 使用 git checkout的--orphan参数:git checkout --orphan emptybranch该命令会生成一个叫emptybranch...原创 2020-02-04 10:47:56 · 6140 阅读 · 0 评论 -
解决报错 Unexpected end of JSON input while parsing near '...":{},"_hasShrinkwrap
npm install出现”Unexpected end of JSON input while parsing near”的错误。运行 npm cache clean --force原创 2019-10-26 13:08:11 · 843 阅读 · 0 评论 -
iOS开发-关于allocWithZone/copyWithZone/NSZone
NSZone可以想象成一个内存池,alloc或是dealloc这些操作,都是在这个内存池中操作的。 Cocoa总是会配置一个默认的NSZone,任何默认的内存操作都是在这个“zone”上操作的。默认的NSZone的缺陷在于,它是全局范围的,时间一长,必然会导致内存的碎片化,如果你需要大量的alloc一些object,那么性能就会受到一些影响。 所有cocoa提供方法,你可以自己生成一个NSZon原创 2017-10-29 20:41:45 · 1035 阅读 · 0 评论 -
Git合并特定Commits 到另一个分支
1.合并某个分支上的单个Commit首先,用Git log或GitX工具查看一下你想选择哪些commits进行合并,例如:dd100 - dd1001 -9143a9 - a6fd86 - 5a6057 [master] \ dd1011 - 62ecee - b886a0 [feature]比如,feature 分支上的Commit 62ecee 非原创 2017-08-22 15:33:27 · 832 阅读 · 0 评论 -
在Mac OS上搭建Python的开发环境
1.安装homebrewhomebrew主页 :https://brew.sh/index_zh-cn.html brew的安装使用一条ruby命令即可,Mac系统上已经默认安装了ruby。//可以查看版本号ruby --version2.在终端运行安装命令/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homeb原创 2017-07-24 10:21:24 · 906 阅读 · 0 评论 -
一个灵活设置十六进制颜色值的方法
使用SmartHexColor来方便灵活的设置颜色值。可以参考我写的代码。 https://github.com/biubiublue/SmartHexColor使用起来非常方便: Podfileplatform :ios,'7.0'target "TargetName" dopod 'biu_SHColor'endObjective-C:#import <biu_SHColor/SHColo原创 2017-07-19 17:36:44 · 1880 阅读 · 0 评论 -
在Cocoapods上发布自己的代码
主要步骤1.代码上传Github 2.创建podspec文件,并验证是否通过 3.在Github上创建release版本 4.注册CocoaPods账号 5.上传代码到CocoaPods1.代码上传Github打开https://github.com/ 注册并创建代码仓库 如下图所示 创建工程代码,然后上传到gitHub,文件夹目录如下所示: 都是比较通用的步骤,一般不会有什么问原创 2017-07-21 08:48:21 · 479 阅读 · 0 评论 -
一个灵活设置角标的方法
有时候会有设置角标的需求,如果每次都是手动设置,非常麻烦。 使用SuperCornerMark可以方便快捷的设置角标。使用方法:Podfileplatform :ios,'8.0'target "Demo" dopod 'biu_SCMark','1.0.3'end#import <biu_SCMark/SCMark.h>...SCMColorModel *cModel = [[SCMCol原创 2017-07-20 16:30:30 · 1493 阅读 · 0 评论 -
如何监测Tableview loaddata结束
找了好久没有找到官方的方法,在stackflow上有人给出了这样的想法: 在将要显示最后一个cell的时候,其实也就是reloaddata结束的时候,再进行操作。 原文stackoverflow地址: http://stackoverflow.com/questions/4163579/how-to-detect-the-end-of-loading-of-uitableview-(void)原创 2017-07-02 09:49:29 · 567 阅读 · 0 评论 -
Objective-C中Alloc和AllocWithZone
1、先看看单例的实现代码#import "Singleton.h"@implementation Singletonstatic Singleton* _instance = nil;+(instancetype) shareInstance{ static dispatch_once_t onceToken ; dispatch_once(&onceToken, ^{原创 2017-05-09 18:19:35 · 584 阅读 · 0 评论 -
Xcode 代码对齐(插件XAlign)
1.使用Xcode自带的代码对齐快捷键首先选中代码 或 command A全选 ,然后 control + i 即可。2.使用插件XAlign插件XAlign链接原创 2017-03-26 21:52:21 · 1560 阅读 · 0 评论 -
iOS小技巧19-Xcode7增加空工程模板
iOS小技巧19-Xcode7增加空工程模板1、在应用程序文件夹中找到Xcode.app2、选中Xcode.app 然后右键点击 “显示包内容”3、将文件拷贝到指定路径中空工程模板文件路径:Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xc原创 2016-06-10 16:22:24 · 765 阅读 · 0 评论 -
iOS开发76-使用Xcode查看实时日志
iOS开发76-使用Xcode查看实时日志在Xcode上运行App代码的时候,可以实时查看到日志。在没有APP源代码的情况下,直接使用Xcode查看Debug版本的App来查看实时日志。步骤如下:1、打开Xcode->Window->Devices2、选择对应的设备和App3、点击App查看实时日志原创 2016-08-25 08:15:33 · 13240 阅读 · 0 评论 -
iOS小技巧21-MacOS 苹果系统下Outlook打不开,显示“您需要最新版本的Outlook才能使用此数据库”
iOS小技巧21-MacOS 苹果系统下Outlook打不开,显示“您需要最新版本的Outlook才能使用此数据库”错误信息:解决方法:按照下图的路径删除指定文件夹后,重新打开Outlook即可。 有问题请联系博主,邮箱:utopia.pro@aliyun.com原创 2016-06-20 16:01:53 · 30154 阅读 · 5 评论 -
iOS 巧妙使用编译宏定义让代码在不同的情况下执行
关于预编译宏 #ifdef #else #endif#ifdef ****flag //代码1 else //代码2 #endif意思是 如果标识符****flag已被#define命令定义过,则对代码1进行编译,否则对代码2进行编译。同时也有#ifndef,则与#ifdef刚好相反。(1)OPTIMIZE : 用于release和debug的判断,当原创 2017-03-07 07:23:26 · 4671 阅读 · 0 评论 -
iOS 在Debug下显示log,在Release下屏蔽log输出
OPTIMIZE :用于release和debug的判断,当选择了OPTIMIZE 时,可以让代码在release时执行,在debug时不执行。 示例如下:#ifndef __OPTIMIZE__ //这里是debug模式下 else //这里是release模式下 #endif原创 2017-03-07 07:12:22 · 2011 阅读 · 0 评论 -
git如何放弃所有本地修改
git checkout . #本地所有修改的。没有的提交的,都返回到原来的状态git stash #把所有没有提交的修改暂存到stash里面。可用git stash pop回复。git reset --hard HASH #返回到某个节点,不保留修改。git reset --soft HASH #返回到某个节点。保留修改原创 2017-03-09 09:18:58 · 10212 阅读 · 0 评论 -
iOS开发中字符串和字典的转换
1.字符串转字典NSString * jsonString = @“123”;NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:jsonData原创 2017-10-12 18:04:11 · 7751 阅读 · 0 评论 -
iOS 将文本复制到剪切板
UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];pasteboard.string =@"将文本复制到剪切板";原创 2017-10-29 20:24:46 · 1628 阅读 · 0 评论 -
Git多账户切换配置
1、手动切换gitlab和github项目切换时, github上多个项目账户不同时,都需要切换用户。git config --global user.email [xx的mail@email.com]git config --global user.name [xx的name]但是这个方法需要来回切换,比较麻烦。2、每个项目设置单独的user.name 和 user.email可以...原创 2019-08-06 01:06:58 · 4265 阅读 · 0 评论 -
报错:Operation not permitted - /usr/bin/rougify 的解决方案
报错:在执行sudo gem install xcpretty的时候报错:ERROR: While executing gem ... (Errno::EPERM) Operation not permitted - /usr/bin/rougify解决方法通过brew重新安装gem,参考stackoverflowbrew install rubysudo gem update --sy原创 2018-02-13 13:12:39 · 755 阅读 · 0 评论 -
iOS开发-APP启动过程
当用户点击应用图标之后,应用就开始启动。应用启动完成后,就会展示一系列的视图,和用户进行各种各样的交互(如滑动、点击)。当用户退出应用后,该应用就无法和用户进行交互。这一过程就体现了一个应用的生命周期(从启动到退出)。这里只介绍应用程序的显示部分。 在介绍应用启动过程及原理之前,先来了解一些概念以及其作用。1、UIApplication UIApplication对象是应用程序的象征,一个原创 2017-11-06 16:13:54 · 618 阅读 · 0 评论 -
iOS开发-测量APP启动耗时
冷启动冷启动就是App被kill掉以后一切从头开始启动的过程。热启动当用户按下home键的时候,iOS的App并不会马上被kill掉,还会继续存活若干时间。理想情况下,用户点击App的图标再次回来的时候,App几乎不需要做什么,就可以还原到退出前的状态,继续为用户服务。这种持续存活的情况下启动App,称为热启动。冷启动比热启动重要苹果提供的测量启动耗时方法 在Xcode的菜单中选择Project→原创 2017-11-18 13:47:49 · 4049 阅读 · 0 评论 -
iOS开发-面向切面编程之 Aspects 源码解析
1、面向切面编程应用在统计上 业务逻辑和统计逻辑经常耦合在一起,一方面影响了正常的业务逻辑,同时也很容易搞乱打点逻辑,而且要查看打点情况的时候也很分散。在 web 编程时候,这种场景很早就有了很成熟的方案,也就是所谓的AOP 编程(面向切面编程),其原理也就是在不更改正常的业务处理流程的前提下,通过生成一个动态代理类,从而实现对目标对象嵌入附加的操作。在 iOS 中,要想实现相似的效果也很简单,利原创 2017-11-03 17:18:22 · 683 阅读 · 0 评论 -
iOS开发-修饰代理delegate用weak还是assign?
1.对于strong:该对象强引用delegate,外界不能销毁delegate对象,会导致循环引用(Retain Cycles)2.对于assing:assign是指针赋值,不对引用计数操作,使用之后如果没有置为nil,可能就会产生野指针。@property (nonatomic, assign, readwrite) id delegate;即便delegate指向的对象销毁了,delegate原创 2017-11-17 15:27:50 · 1760 阅读 · 0 评论 -
iOS开发-UITableView在iOS11默认使用Self-Sizing造成contentSize计算问题的解决
UITableView在iOS11默认使用Self-SizingUITableView的estimatedRowHeight、estimatedSectionHeaderHeight、 estimatedSectionFooterHeight三个高度估算属性由默认的0变成了UITableViewAutomaticDimension,导致很多地方的TableView高度和contentSize出现了问原创 2017-11-03 10:40:09 · 2295 阅读 · 1 评论 -
iOS开发-Runtime是如何实现weak属性的?
weak属性的特点: weak 表明该属性定义了一种“非拥有关系” (nonowning relationship)。 为weak属性设置新值时,设置方法既不保留新值,也不释放旧值。 同assign类似,然而在属性所指的对象释放时候,属性值也会清空(nil out)。runtime是如何实现 weak 变量的自动置nil?weak 对象会放入一个 hash 表中。 用 weak 指向的对象原创 2017-11-11 20:15:19 · 2779 阅读 · 0 评论 -
iOS开发-__func__的使用
由于iOS底层是GCC,所以也支持 func标识符,用于打印当前函数名,可以说是排错利器.#import "Amodel.h"@implementationAmodel+ (void) load{NSLog(@"%s", __func__);}@end打印信息:+[Amodel load]原创 2017-11-10 17:55:52 · 1514 阅读 · 0 评论 -
iOS开发-nil/Nil/NULL/NSNull 的使用
nil: A null pointer to an Objective-C object. ( #define nil ((id)0) ) nil 是一个对象值。Nil: A null pointer to an Objective-C class.NULL: A null pointer to anything else. ( #define NULL ((void *)0) ) NU原创 2017-11-10 17:13:53 · 395 阅读 · 0 评论 -
iOS开发-AutoreleasePool是什么时候销毁的?
在面试中经常会遇到面试官问这样的问题。 AutoreleasePool是什么时候销毁的? 这个问题能回答上来的话,肯定要对AutoreleasePool和RunLoop有所了解才行。AutoreleasePool是在什么时候创建的,又是在什么时候被销毁? 这里我们再简单的回顾一下AutoreleasePool的作用。 AutoreleasePool被称为自动释放池,在释放池中的原创 2017-10-31 13:21:33 · 4194 阅读 · 4 评论 -
iOS开发-使用Runloop实现线程保活、线程常驻
保证线程的长时间存活 在iOS开发过程中,有时一些花费时间比较长的操作阻塞主线程,导致界面卡顿,那么我们就会创建一个子线程,然后把这些花费时间比较长的操作放在子线程中来处理。可是当子线程中的任务执行完毕后,子线程就会被销毁掉。 首先,我们创建一个testThread类,继承自NSThread,然后重写dealloc 方法。@interface testThread : NSThread@end@原创 2017-11-07 18:02:27 · 8328 阅读 · 1 评论 -
iOS开发-RunLoop的退出方式
一. 三种启动RunLoop的方式通过[NSRunLoop currentRunLoop]或者CFRunLoopGetCurrent()可以获取当前线程的runloop。 启动一个runloop有以下三种方法:- (void)run; - (void)runUntilDate:(NSDate *)limitDate;- (void)runMode:(NSString *)mode beforeD原创 2017-11-07 17:06:08 · 2352 阅读 · 0 评论 -
iOS标记指针(Tagged Pointer)技术
在2013年9月,苹果推出了iPhone5s,配备了首个采用64位架构的A7双核处理器,为了节省内存和提高执行效率,苹果提出了标记指针(Tagged Pointer) 的概念。对于64位程序,引入Tagged Pointer后,相关逻辑能减少一半的内存占用,以及3倍的访问速度提升,100倍的创建、销毁速度提升。原有的对象为什么会浪费内存?假设我们要存储一个NSNumber对象,其值是一个整数。正常原创 2017-10-29 22:09:07 · 1321 阅读 · 0 评论 -
UILabel设置行间距和字间距
#define UILABEL_LINE_SPACE 6#define HEIGHT [ [ UIScreen mainScreen ] bounds ].size.height//给UILabel设置行间距和字间距-(void)setLabelSpace:(UILabel*)label withValue:(NSString*)str withFont:(UIFont*)font {原创 2017-03-18 21:04:01 · 1278 阅读 · 0 评论 -
解决UITextField输入时文字往下偏移的问题
方法1textField.clearButtonMode = UITextFieldViewModeWhileEditing;方法2//继承UITextField 重写方法- (CGRect)textRectForBounds:(CGRect)bounds { return CGRectInset(bounds, 2, 1);}- (CGRect)editingRectForBound原创 2017-03-18 20:52:33 · 2605 阅读 · 0 评论 -
iOS NSString拼接字符串
NSString* str_C; // 结果字符串NSString* str_A, str_B; //已存在的字符串,需要将str_A和str_B连接起来//方法1str_C = [NSString initWithFormat:@"%@,%@", str_A, str_B ];//方法2str_C = [str_A stringByAppendingString: str_B];//方法3原创 2017-02-24 11:50:57 · 644 阅读 · 0 评论 -
iOS小技巧17-iPhone如何安装ipa包
iOS小技巧17-iPhone如何安装ipa包ipa文件是苹果iTunes能够识别的软件,将ipa文件拖动到iTunes里面,或者打开itunes-点击文件-添加到资料库,或者右键点击ipa文件选择使用iTunes打开,然后连接你的iOS设备,这样iTunes就可以识别到你的应用程序,然后同步一下就可以了。 有问题请联系博主,邮箱:bestnathan@aliyun.com原创 2016-03-15 19:35:35 · 2290 阅读 · 0 评论 -
iOS小技巧15-改变UITabBarItem 字体颜色
iOS小技巧15-改变UITabBarItem 字体颜色- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { //UITabBarItem字原创 2015-12-24 11:59:20 · 767 阅读 · 0 评论 -
iOS小技巧14- 调试bug技巧-打印XCode的 Stack Trace信息
iOS小技巧14- 调试bug技巧-打印XCode的 Stack Trace信息有时候调试程序会崩溃,但是并不会崩溃到出问题的地方。int main(int argc, char *argv[]){ @autoreleasepool { // 异常停在了这里-并不能看出问题 return UIApplicationMain(argc, argv原创 2015-12-15 23:16:07 · 981 阅读 · 0 评论 -
iOS小技巧16-iOS/iPhone/Mac OS X版本历史
iOS小技巧16-iOS/iPhone/Mac OS X版本历史iPhone历史2007年6月29日 iPhone第一代 3.5英寸显示屏2008年7月11日 iPhone3G 支持3G网络 移动应用商店App Store2009年 iPhone3GS2010年 iPhone4 再一次改变一切 This changes everything.Again. iPh原创 2015-12-31 19:13:09 · 1065 阅读 · 0 评论