OC
bowei-iOS
小小的躯壳 大大的梦想
展开
-
AFN 网络请求问题报错,“Request failed: internal server error (500)“ 500
500有可能是后台的问题,还有可能是我们前端设置接收参数序列化的问题.requestSerializer是AFNetworking参数编码的序列化器,它把输入的参数编码后才往服务器发送,有三种编码格式:AFHTTPRequestSerializer:第一种是普通的http的编码格式,转成userName=xiaoming&password=12345678&time=20180807AFJSONRequestSerializer:第二种也是json编码格式,会转成{"use...原创 2021-06-25 10:39:21 · 1810 阅读 · 0 评论 -
笔记:_xxx与self.xxx的区别
_xxx访问的是xxx的地址。self.xxx访问的是xxx的getter。这两者并不是完全等价的,self.xxx是用objc_msgSend发消息,_xxx或者self->xxx则是直接访问内存地址,一般建议在init里面用_xxx,其他地方用self.xxx.原创 2021-02-24 09:29:12 · 344 阅读 · 0 评论 -
通过KVC修改UITextField占位文字的颜色
UITextField *Tf = [[UITextField alloc] init];Ivar ivar = class_getInstanceVariable([UITextField class], "_placeholderLabel");UILabel *placeholderLabel = object_getIvar(Tf, ivar);placeholderLabel.textColor = ZZColor(214, 214, 214, 1);原创 2020-08-31 14:39:52 · 149 阅读 · 0 评论 -
iOS获取常用设备信息
系统名称 + (NSString *)getDeviceSystemName { return [[UIDevice currentDevice]systemName]; } 系统版本号 + (NSString *)getDeviceSystemVersion { return [[UIDevice currentDevice]systemVersion]; } 设备内存 + (CGFloat)getDeviceTotalMemory { ...原创 2020-08-31 10:19:11 · 188 阅读 · 0 评论 -
iOS开发中在block为什么有的要用__weak和__strong修饰
__weak是为了解决循环引用__strong是为了防止block持有的对象提前释放一般情况下__weak使用的多, 创建__weak typeof(self) weakSelf = self;原创 2020-07-23 14:33:53 · 545 阅读 · 0 评论 -
如何高性能的给 UIImageView 加个圆角?
不好的解决方案:使用下面的方式会强制Core Animation提前渲染屏幕的离屏绘制, 而离屏绘制就会给性能带来负面影响,会有卡顿的现象出现。self.view.layer.cornerRadius = 5.0f;self.view.layer.masksToBounds = YES;正确的解决方案:使用绘图技术- (UIImage *)circleImage { // NO...原创 2018-09-10 14:31:56 · 253 阅读 · 0 评论 -
如何用GCD同步若干个异步调用?
根据若干个url异步加载多张图片,然后在都下载完成后合成一张整图// 使用Dispatch Group追加block到Global Group Queue,这些block如果全部执行完毕,就会执行Main Dispatch Queue中的结束处理的block。// 创建队列组dispatch_group_t group = dispatch_group_create();// 获取...原创 2018-09-10 14:29:38 · 370 阅读 · 0 评论 -
如何令自己所写的对象具有拷贝功能?
如果想让自己的类具备copy方法,并返回不可边类型,必须遵循nscopying协议,并且实现- (id)copyWithZone:(NSZone *)zone;如果让自己的类具备mutableCopy方法,并且放回可变类型,必须遵守NSMutableCopying,并实现- (id)mutableCopyWithZone:(nullable NSZone *)zone注意:再此说的copy对应不...原创 2018-07-26 11:15:13 · 847 阅读 · 0 评论 -
如何把一张图片重复使用设置成一条线
UIView *headerimage = [[UIView alloc]initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, 5)];[headerimage setBackgroundColor: [UIColor colorWithPatternImage:[UIImage imageNamed:@"confirmOrderHeader"]]];[self...原创 2018-06-11 09:36:59 · 581 阅读 · 0 评论 -
SQLite的在iOS中的基本使用
SQLite基本语句SQLite基础入门SQLite的使用——OC代码SQLite的使用—— Swift代码转载 2018-09-18 10:38:58 · 442 阅读 · 0 评论 -
iOS代码混淆
https://blog.csdn.net/chenyong05314/article/details/74944276转载 2019-01-21 10:31:16 · 303 阅读 · 0 评论 -
iOS常用技术点列表
技术点:1.热更新 (及时解决线上问题)2.runtime(json解析、数据越界、扩大button点击事件、拦截系统方法)3.即时通讯4.底层的封装5.https兼容(单项验证、双向验证)6.aso优化(用户留存、日活跃分析、关键词)7.视图流畅的帧数8.sdwebimage的实现原理9.afnetworking的实现原理10.消息机制11.vc的生命...原创 2019-03-14 11:05:24 · 951 阅读 · 0 评论 -
iOS底层实现九宫格菜单可配置、页面跳转不需要#import "xxx.h"
https://www.jianshu.com/p/305cce2d513f转载 2019-03-08 10:59:16 · 266 阅读 · 0 评论 -
mainBundle的使用
bundle是一个目录,其中包含了程序会使用到的资源. 这些资源包含了如图像,声音,编译好的代码,nib文件(用户也会把bundle称为plug-in). 对应bundle,cocoa提供了类NSBundle.我们的程序是一个bundle. 在Finder中,一个应用程序看上去和其他文件没有什么区别. 但是实际上它是一个包含了nib文件,编译代码,以及其他资源的目录. 我们把这个目录叫做程序的ma...原创 2019-04-22 10:16:06 · 901 阅读 · 0 评论 -
MGJRouter的封装使用
1.把MGJRouter文件夹拖入项目中2.新建一个NSObject类,在load方法里注册路由代码+(void)load{ //普通跳转 [MGJRouter registerURLPattern:@"LBW://News/detailVC" toHandler:^(NSDictionary *routerParameters) { UI...原创 2019-05-28 10:50:23 · 903 阅读 · 0 评论 -
category为什么不能添加属性?
Category不能添加成员变量,可以添加属性,但是属性要手动实现setter和getter方法。Category的原理简单地说就是通过runtime动态的吧Category中的方法等添加到类中,从category的定义也可以看出category的可为(可以添加实例方法,类方法,甚至可以实现协议,添加属性)和不可为(无法添加实例变量)。经过编译的类在程序启动后就被runtime加载,没...原创 2019-09-09 10:00:45 · 633 阅读 · 0 评论 -
UIabel设置自适应宽高之后,会出现黑边的问题解决
原因:frame的宽高没有取整,或者说上下左右边没有取整解决方法:在取frame得时候,加上CGRectIntegral,使得宽、高得到一个整数,然后就完美的解决这个问题了修改前:label.frame =CGRectMake(0, 0, size.width, size.height);修改后: label.frame = CGRectIntegral(CGRectMake(0, 0, si...原创 2018-04-23 13:45:24 · 356 阅读 · 0 评论 -
iOS 大小写字母之间的转换
大小写字母转换以及汉字首字母转换转载 2018-04-17 10:50:59 · 2308 阅读 · 0 评论 -
ios计算时间差
// 1.确定时间 NSString *time1 = @"2015-06-23 12:18:15"; NSString *time2 = @"2015-06-28 10:10:10"; // 2.将时间转换为date NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; formatter....原创 2018-04-17 10:47:53 · 995 阅读 · 0 评论 -
JS和OC的交互(基于UIWebView)
JS和OC的交互分为两种方式:JS调用OC以及OC调用JS,一般的原则是如果JS想传值给OC就用JS调用OC,相反则用OC调用JS。OC调用JS:webView对象通过调用stringByEvaluatingJavaScriptFromString这个方法执行一段JS代码实现交互。如:self.title = [self.webView stringByEvalua原创 2017-03-27 08:14:37 · 397 阅读 · 0 评论 -
属性readwrite,readonly,assign,retain,copy,nonatomic 各是什么作用
1). readwrite 是可读可写特性;需要生成getter方法和setter方法时2). readonly 是只读特性 只会生成getter方法 不会生成setter方法 ;不希望属性在类外改变3). assign 是赋值特性,setter方法将传入参数赋值给实例变量;仅设置变量时;4). retain 表示持有特性,setter方法将传入参数先保留,再赋值,传入参数原创 2017-04-05 08:07:44 · 393 阅读 · 0 评论 -
Objective-C的内存管理
Objective-C的内存管理主要有三种方式ARC(自动内存计数)、手动内存计数、内存池。1). (Garbage Collection)自动内存计数:这种方式和java类似,在你的程序的执行过程中。始终有一个高人在背后准确地帮你收拾垃圾,你不用考虑它什么时候开始工作,怎样工作。你只需要明白,我申请了一段内存空间,当我不再使用从而这段内存成为垃圾的时候,我就彻底的把它忘记掉,反正那个高人原创 2017-04-05 08:09:50 · 236 阅读 · 0 评论 -
原子(atomic)跟非原子(non-atomic)属性有什么区别
1). atomic提供多线程安全。是防止在写未完成的时候被另外一个线程读取,造成数据错误2). non-atomic:在自己管理内存的环境中,解析的访问器保留并自动释放返回的值,如果指定了 nonatomic ,那么访问器只是简单地返回这个值原创 2017-04-05 08:10:41 · 2230 阅读 · 0 评论 -
浅复制和深复制的区别
浅层复制:只复制指向对象的指针,而不复制引用对象本身。深层复制:复制引用对象本身。意思就是说我有个A对象,复制一份后得到A_copy对象后,对于浅复制来说,A和A_copy指向的是同一个内存资源,复制的只不过是是一个指针,对象本身资源还是只有一份,那如果我们对A_copy执行了修改操作,那么发现A引用的对象同样被修改,这其实违背了我们复制拷贝的一个思想。深复制就好理解了,内原创 2017-04-05 08:13:23 · 461 阅读 · 0 评论 -
什么是KVO和KVC
KVC:键 – 值编码是一种间接访问对象的属性使用字符串来标识属性,而不是通过调用存取方法,直接或通过实例变量访问的机制。很多情况下可以简化程序代码。apple文档其实给了一个很好的例子。KVO:键值观察机制,他提供了观察某一属性变化的方法,极大的简化了代码。具体用看到嗯哼用到过的一个地方是对于按钮点击变化状态的的监控。比如我自定义的一个button原创 2017-04-06 08:00:51 · 311 阅读 · 0 评论 -
oc是动态运行时语言是什么意思
多态。 主要是将数据类型的确定由编译时,推迟到了运行时。这个问题其实浅涉及到两个概念,运行时和多态。简单来说,运行时机制使我们直到运行时才去决定一个对象的类别,以及调用该类别对象指定方法。多态:不同对象以自己的方式响应相同的消息的能力叫做多态。意思就是假设生物类(life)都用有一个相同的方法-eat;那人类属于生物,猪也属于生物,都继承了life后,实现各自的ea原创 2017-04-06 08:02:06 · 559 阅读 · 0 评论 -
通知和协议的不同之处?
协议有控制链(has-a)的关系,通知没有。首先我一开始也不太明白,什么叫控制链(专业术语了~)。但是简单分析下通知和代理的行为模式,我们大致可以有自己的理解简单来说,通知的话,它可以一对多,一条消息可以发送给多个消息接受者。代理按我们的理解,到不是直接说不能一对多,比如我们知道的明星经济代理人,很多时候一个经济人负责好几个明星的事务。只是对于不同明星间,代理的事物原创 2017-04-06 08:03:15 · 319 阅读 · 0 评论 -
对于单例的理解
在objective-c中要实现一个单例类,至少需要做以下四个步骤:1).为单例对象实现一个静态实例,并初始化,然后设置成nil,2).实现一个实例构造方法检查上面声明的静态实例是否为nil,如果是则新建并返回一个本类的实例,3).重写allocWithZone方法,用来保证其他人直接使用alloc和init试图获得一个新实力的时候不产生一个新实例,4).适当实现a原创 2017-04-06 08:03:49 · 219 阅读 · 0 评论 -
frame和bounds有什么不同?
frame指的是:该view在父view坐标系统中的位置和大小。(参照点是父亲的坐标系统)bounds指的是:该view在本身坐标系统中 的位置和大小。(参照点是本身坐标系统)原创 2017-04-06 08:04:38 · 308 阅读 · 0 评论 -
NSFileManager使用文件操作
点击打开链接转载 2017-04-26 08:11:06 · 238 阅读 · 0 评论 -
iOS数组相关问题
1.快速创建数组NSArray*arrary1=[[NSArrayalloc]initWithObjects:@"one",nil];NSLog(@"array1:%@",arrary1);NSArray*arrary2=[NSArrayarrayWithObject:@"one"];NSArray*arrary3=[NSArrayarrayWithObject原创 2017-06-01 08:30:58 · 291 阅读 · 0 评论 -
iOS11 UITbleView适配的一些问题及解决方法
// tableView 偏移20/64适配if (@available(iOS 11.0, *)) { self.tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;//UIScrollView也适用}else { self.automatically原创 2017-10-16 11:02:12 · 520 阅读 · 0 评论 -
UIbutton手势拖动
按钮实现拖动又不影响点击效果,不建议UIControlEventTouchDragInside这些事件,不容易判断,建议使用UIPanGestureRecognizer拖动手势,和点击事件不冲突{ CGPoint beginPoint; CGFloat rightMargin; CGFloat leftMargin; CGFloat topMargin; CGFloa...原创 2018-03-08 10:33:05 · 1312 阅读 · 0 评论 -
tableView设置UITableViewStyleGrouped类型顶部有多余的高度 怎么解决
在IOS8之后,table设置StyleGrouped类型,需要设置tableHeaderView,这样才有效,把tableHeaderView = nil,也是没有用。需要创建一个view实例,且frame不能设置为CGRectZero。table.tableHeaderView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, ScreenWid...原创 2018-04-17 10:46:25 · 3617 阅读 · 0 评论 -
weak与strong ,assign
1. 属性使用weak@property (weak, nonatomic) IBOutletUILabel *noticeLabel;UI控件修饰时使用 weak 和 strong都可以使用, 但使用 strong 会造成内存泄露,如果 使用strong , noticeLabel 所在的view 如果被销毁, 那么因为 控制器对noticeLabel 有一个强引用,原创 2017-04-01 08:18:37 · 231 阅读 · 0 评论