OC
文章平均质量分 63
天方夜歌
iOS php
展开
-
Flutter initState只执行一次的方法IndexedStack
前言:力求写出像源码一样流畅的跨平台技术前端有一个很大的特点,就是不断的刷新,消耗性能,跨平台技术继承了这一特点,因此我们需要去掉这一点方法一:AutomaticKeepAliveClientMixin (经小萌测试这个方案不可行,可能是版本的问题)方法二:IndexedStack(层叠小组件经小萌测试可行)IndexedStack( index: currentIndex, children: [ RecommendHome原创 2020-10-29 10:57:42 · 2011 阅读 · 0 评论 -
iOS中堆和栈的使用(Swift)
堆和栈都是一种数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进行插入和删除。堆:队列优先,先进先出(FIFO—first in first out)。栈:先进后出(FILO—First-In/Last-Out)。堆栈空间分配1.栈区(stack):由编译器自动分配释放,存放函数的参数值,局部变量等值。其操作方式类似于数据结构中的栈。2.堆区(heap):一般由程序员分配释放,若程序员不释放,则可能会引起内存泄漏。其类似于链表。堆栈缓存方式iOS 中应用程序.转载 2020-07-31 10:22:15 · 1212 阅读 · 0 评论 -
OC底层原理-字符占字节知悉
32位机器(字节) 64位机器(字节) char 1 1 char *(指针类型) 4 8 BOOL 1 1 short 2 2 int 4 4 unsigned int 4 4 NSInteger 4 8 long 4 8 long long 8 8 unsigned long long 8 8 float 4 4...原创 2020-07-28 10:46:52 · 348 阅读 · 0 评论 -
OpenGL 固定存储着色器理解
背景简介在OpenGL 核心框架中,在提交一个几何图形进行渲染之前,必须实现一个着⾊器。在固定管线下,使用固定存储着色器。固定存储着⾊器由GLTools的C++类GLShaderManager管理,它们能够满⾜进⾏基本渲染的基本要求。对于要求不高的程序员,这些存储着⾊器已经⾜以满⾜他们的需求。主代码定义存储着色器GLShaderManager shaderManager; 初始化存储着色器shaderManager.InitializeStockShaders(); 使用存储着色器shade原创 2020-07-22 16:21:47 · 262 阅读 · 0 评论 -
swift 类型判断 Dictory Array
一 、类型的判断1、is 的介绍Swift 中类型的判断的关键词是is。is操作用来判断某一个对象是否是某一个特定的类,它会返回一个bool类型的值。2、 is的使用方法1> is 的一般判断(Swift 系统也会自动判断)// 类型的一般判断方法let NetWStr = "NetWork小贱"/** 判断NetWStr 是否是 “字符串” */if N...原创 2020-03-12 10:44:46 · 1740 阅读 · 0 评论 -
AVRoutePickerView 和 MPVolumeView 投屏
最近小萌的项目有投屏的需求,开始使用的是保利威的SDK,但是保利威的SDK不管iOS或者Android都是只支持乐播投屏,但是我们项目的需求是AirPlay投屏 在我查找很多资料的过程中发现AVRoutePickerView和MPVolumeView都是支持投屏,但是AVRoutePickerView支持iOS11以上的系统,iOS11一下的系统只能用MPVolumeView来...原创 2020-01-15 10:53:47 · 4504 阅读 · 0 评论 -
小细节大问题--[[UIApplication sharedApplication].windows lastObject]
在开发的过程中总是遇到这样那样的问题,随着Xcode以及iOS系统的变更,需要我们处理的问题越来越多,iOS工程师工作适配的优越感早就消失了,随之而来的各种问题的解决,以及不断的跳坑。[[UIApplication sharedApplication].windows lastObject]之前这行代码是获取最后一个window的,可是和第三方的IQKeyboardManager管理器冲突,如果没原创 2018-04-03 18:49:51 · 1014 阅读 · 0 评论 -
微信登录出现Error Domain=UMSocialPlatformErrorDomain Code=2002 "(null)" errcode=40125,
今天把苹果账号换了,之前的苹果账号不再发布新的App了,可是之前注册的BundleID忘记删除了。 悲催了,此BundleID不能用了,只好更换BundleID。 可是之前注册好的各个开放平台也要更换BungleID就出现了这样的错误:Error Domain=UMSocialPlatformErrorDomain Code=2002 “(null)” UserInfo...原创 2018-02-08 17:50:00 · 5919 阅读 · 4 评论 -
预处理命令之条件编译(#ifdef,#else,#endif,#if,#ifndef等)
理解:在编译之前进行的处理。预处理主要有三个方面的内容: 1.宏定义; 2.文件包含; 3.条件编译。 预处理命令以符号“#”开头。在之前一直对这一块不太重视,可是实际开发中这些预处理命令有很大的用处,常用的开发环境和生产环境,因此梳理一下预处理命令知识。 //重写NSLog,Debug模式下打印日志和当前行数#if DEBUG#define NSLog(...) NSLog(__VA_ARG原创 2018-03-23 16:11:10 · 1497 阅读 · 0 评论 -
NSSet和NSMutableSet介绍
NSSet集合对象是用来干什么的呢,在之前做项目中很少用,但并不是代表不好用,在追求效率优化方面NSSet要比NSArray要高的多,比如在苹果端查找数据库中的数据NSSet要比NSArray要快的多。学习了NSSet可能会发现项目中有些情况可以优化,尤其是数组遍历,判断唯一性,还有其他集合是一种哈希表,运用散列算法,查找集合中的元素比数组速度更快,但是它没有顺序。集合(NSSet)和数组(NS原创 2018-03-14 11:42:17 · 806 阅读 · 0 评论 -
极光推送封装(页面跳转,设置角标,设置别名)
今天检查自己的代码的时候发现AppDelegate中的代码太多了,并且有优化的空间,因此就优化了自己的代码,下面是主要代码:下载极光推送封装DemoGitHub下载地址:https://github.com/shuilanjianyue/JPushTestPushEncapsulation.h#import <Foundation/Foundation.h>#imp...原创 2018-03-20 13:07:12 · 1069 阅读 · 2 评论 -
sortedArrayUsingComparator数组排序
先讲解一点小知识:适用于数字,字母排序NSOrderedAscending的意思是:左边的操作对象小于右边的对象。NSOrderedDescending的意思是:左边的操作对象大于右边的对象。 NSArray *array = [NSArrayarrayWithObjects:@"password",@"usernam原创 2017-07-12 15:15:27 · 2282 阅读 · 0 评论 -
NSTimer的使用
NSTimer 的头文件/* NSTimer.h Copyright (c) 1994-2015, Apple Inc. All rights reserved.*/#import #import NS_ASSUME_NONNULL_BEGIN@interface NSTimer : NSObject/** 这下面主要是一些构造方法*/// Use t转载 2017-07-07 15:47:36 · 1186 阅读 · 0 评论 -
UITableView刷新某一部分或某一行
刷新某一部分或某一行//一个section刷新NSIndexSet *indexSet=[[NSIndexSet alloc]initWithIndex:2];[tableview reloadSections:indexSet withRowAnimation:UITableViewRowAnimationAutomatic];//一个cell刷新NSIn原创 2017-07-11 10:41:59 · 881 阅读 · 0 评论 -
UIResponder
1:首先查看一下关于UIResponder的定义NS_CLASS_AVAILABLE_IOS(2_0) @interface UIResponder : NSObject//响应链中负责传递事件的方法- (nullable UIResponder*)nextResponder;//一个响应对象成为第一响应者的一个前提是它可以成为第一响应者,可以用这个进行判断,默认值为NO-转载 2017-07-14 15:17:50 · 480 阅读 · 0 评论 -
Runtime的使用3 【字典转模型】
提到字典转模型,MJExtension类似这个库,用过的就晓得转成model是多么的便捷。本文就dictionary -> model 略微介绍以下。首先,创建一个model类。[objc] view plain copy@interface Model : NSObject @property (转载 2017-08-11 14:41:30 · 229 阅读 · 0 评论 -
HTTP与HTTPS的区别
超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此,HTTP协议不适合传输一些敏感信息,比如:信用卡号、密码等支付信息。 为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS,为了数据传输转载 2017-08-07 11:51:11 · 355 阅读 · 0 评论 -
iOS安全系列之 HTTPS
转载:http://www.cocoachina.com/ios/20150810/12947.html如何打造一个安全的App?这是每一个移动开发者必须面对的问题。在移动App开发领域,开发工程师对于安全方面的考虑普遍比较欠缺,而由于iOS平台的封闭性,遭遇到的安全问题相比于Android来说要少得多,这就导致了许多iOS开发人员对于安全性方面没有太多的深入,但对于一个合格的软件开发者来转载 2017-07-31 16:54:12 · 1005 阅读 · 0 评论 -
OC温故:面向对象的三大特性(封装,继承,多态)
转自:http://www.cocoachina.com/ios/20141211/10609.html我们都知道,面向对象程序设计中的类有三大特性:继承,封装,多态,这个也是介绍类的时候,必须提到的话题,那么今天就来看一下OC中类的三大特性:一、封装封装就是对类中的一些字段,方法进行保护,不被外界所访问到,有一种权限的控制功能,Java中有四种访问权限修饰符:public,default,prot转载 2017-07-28 14:43:48 · 339 阅读 · 0 评论 -
浅谈Block--简单易懂
iOS代码块Block概述代码块Block是苹果在iOS4开始引入的对C语言的扩展,用来实现匿名函数的特性,Block是一种特殊的数据类型,其可以正常定义变量、作为参数、作为返回值,特殊地,Block还可以保存一段代码,在需要的时候调用,目前Block已经广泛应用于iOS开发中,常用于GCD、动画、排序及各类回调注: Block的声明与赋值只是保存了一段代码段,必须调用才能执行内部代码Block变量原创 2017-07-28 14:11:56 · 375 阅读 · 0 评论 -
AVPlayer封装播放器,支持横屏竖屏总时间,全部时间等
下载链接GitHub地址 SCHPlayer https://github.com/shuilanjianyue/SCHPlayer参考:https://github.com/JmoVxia/CLPlayer 还有 https://github.com/renzifeng/ZFPlayer 都是大神啊,学习了不少知识效果图 第一张横屏 第二张竖屏用法@interface ViewC...原创 2018-03-30 11:06:30 · 2365 阅读 · 0 评论 -
腾讯云IMSDK
最近项目中要植入即时通讯,我们所有技术部的小伙伴经过讨论,环信、阿里云、容联云、还有腾讯云。综合考虑使用腾讯云。因为腾讯云里面的登录注册是封装好的,我们未必会用那么多的功能,所以看文档还是很有必要的。选择的腾讯文档,如果你的项目以后要植入直播,点播等功能选择IM iOS V2,如果只是单纯的聊天功能可以选择IM iOS V2或IM iOS V3,这个要看项目的实际需求了。下面记录一...原创 2018-03-31 17:17:13 · 11762 阅读 · 0 评论 -
UIDeviceOrientation 设备方向 & UIInterfaceOrientation 控制器方向
为什么写这篇博客呢,因为在封装播放器avplayer的过程中,横屏竖屏的旋转让我纠结了好一会,写的明明是正确的,就是因为Xcode有没有勾选横屏出现了旋转问题,小细节决定大问题呀。接下来细说 UIDeviceOrientation 和 UIInterfaceOrientation 的区别与联系一、UIDeviceOrientation设备方向UIDeviceOrientation设备方向,...原创 2018-03-31 18:11:08 · 3430 阅读 · 0 评论 -
Flutter开篇封装TabBar
小萌是从事iOS开发的,最近flutter火的不行,领导要求新的项目使用flutter,节约时间成本,学了一段时间的flutter,从今天开始正式开始Flutter开发新的项目 开篇就是创建项目,搭建基本框架,tabbar和appbar的封装话不多说,直接上主要的代码,下载地址https://github.com/shuilanjianyue/flutter_tab_bar_demo/t...原创 2019-06-18 12:33:45 · 1143 阅读 · 0 评论 -
UITableView解决重用机制带来的隐藏问题
UITableView的重用机制都是老生常谈的问题了,就不多叙述了。但对于多变的自定义cell,有时这种重用机制会出错。比如,当一个cell含有一个UITextField的子类并被放在重用queue中以待重用,这时如果一个未包含任何子视图的cell要显示在屏幕上,就会取出并使用这个重用的cell显示在无任何子视图的cell中,这时候就会出错。解决方法:方法1将获得cell的方法从- (U...转载 2018-12-24 16:25:30 · 536 阅读 · 0 评论 -
程序员,你能“管理”好你的产品经理吗?
一、场景 在开发团队中,我们经常面对产品经理的各种需求变动、项目经理对关键点的 Deadline,总会有一些冲突发生。而对于事情最终执行的开发人员来说,如果这些冲突处理的不好,可能就会变成你个人的问题。作为最终实现功能的程序员,你总不会想被贴上一个 “无法按时完成任务的开发” ,这样的标签吧?这些问题,其实都可以借鉴第三选择的思想来解决。《第三选...转载 2018-11-02 11:22:36 · 280 阅读 · 0 评论 -
跳转到App Store的详情,评论, QQ的某一界面 微信的某一界面
在开发中,我们有的时候需要跳转到各种各样的应用,其实跳转都有一个共性,每一个跳转只需要知道协议链接就好啦 跳转到详情,评论// 跳转到详情NSString *str = [NSString stringWithFormat: @"itms-apps://itunes.apple.com/cn/app/id%@?mt=8", AppId];UIApplication *a...原创 2018-09-25 10:01:04 · 250 阅读 · 0 评论 -
友盟分享长图片,如何截取长图片去分享
实际开发中有没有发现有很多应用都是分享长图片呢?咋一看分享图片这是怎么做的呢,是不是后台返回链接图片做的呢,再一看不像哎,那怎么解决呢? 其实很简单啦// 长图 类型可以是 tableView或者scrollView 等可以滚动的视图 根据需要自己改- (UIImage *)saveLongImage:(UIScrollView *)scrollview{ ...原创 2018-09-18 16:28:21 · 735 阅读 · 0 评论 -
iOS开发之状态栏statusBar颜色变化
在网上搜索了很久,我也试了很多种情况,下面我为每种情况排布一下优先级,刚开始的时候我没有写播放器,使用的是腾讯的SDK,发现我之前设置的状态栏变化不在发生变化啦,所以在这里做一个小结,Xcode默认的颜色是黑色,记录优化代码的点滴第一种:如果其他界面默认都是黑色的,只有几个个别的界面需要白色的花,最简单的方法就是- (void)viewWillAppear:...原创 2018-09-03 16:46:32 · 2712 阅读 · 0 评论 -
[[UIApplication sharedApplication].windows lastObject]出现的问题
随着产品的要求越来越高,对我们的技术水平要求也越来越高啦,有的时候我们需要将View添加到最上层的Window上,比如:各种各样的弹出框、Loading等,经常有同学直接通过:[[UIApplication sharedApplication].windows lastObject] 来获取,这种方法是非常不严谨的,很容易与项目中引用的第三方UI库产生冲突,比如键盘管理器,最容...原创 2018-09-03 14:24:50 · 2452 阅读 · 0 评论 -
Foundation框架之NSSet、NSMutableSet、NSOrderedSet、NSMutableOrderedSet
NSSet:集合。是NSObject的子类,跟NSArray不一样在于,NSArray的元素是有序的,可以通过索引访问,而NSSet的元素是无序的,不能通过索引访问;NSArray的元素可以是重复的,而NSSet的元素不能重复,同一个元素只能有一个。NSMutableSet:可变集合。是NSSet的子类,跟NSSet不一样的地方在于NSMutableSet的元素是可以修改的,可以增加删除替换等操作...原创 2018-06-28 16:42:38 · 871 阅读 · 0 评论 -
UIImagePickerController iOS11调起相册 中的照片被导航栏遮挡
为了适配iOS11下来刷新下下偏移问题,全局设置了 [UIScrollView appearance] 的ContentInsetAdjustmentBehavior为UIScrollViewContentInsetAdjustmentNever导致ScrollView向上偏移了,而在iOS11以下却没问题if (@available(iOS 11.0, *)){ [[UIScrol...转载 2018-06-08 15:15:53 · 1471 阅读 · 0 评论 -
苹果内购审核那些被拒的原因
小萌做的教育类型的项目终于上架了,小萌瞬间喜极而泣,内购终于符合苹果的审核要求啦,小萌感动的稀里哗啦的。 每次上架前小萌现在又养成习惯,看看苹果的审核规则,做了那些改动 App Store 审核指南 现在小萌说一下那些被拒的心酸经历。两年前小萌做过内购,那个功能比较简单,就是娱乐项目的打赏功能。属于消耗型的项目,那个时候很容易就上线了,随着时间的推移,苹果内购的审核规则也在不断的变原创 2018-04-27 13:06:53 · 12516 阅读 · 6 评论 -
iOS 学习视频 资料集合 (视频 +博客)
转载:https://blog.csdn.net/yst19910702/article/details/78809472无意间在网上发现一些学习资源,分享下。资源主要是一些视频资源和博客网站。这些资源主要针对一些初中学着。利用一些基础知识点,中级有小码哥的视频里的视频和组件化。(后面有些博客真的很不错)。总之都是杂七杂八的,分享出来旨在共同学习。有不好的地方还望指教。 虽然都是一些培训班的视频,...转载 2018-05-17 14:19:24 · 4644 阅读 · 2 评论 -
色值的封装方法以及RGB和RGBA的区别
// 取色值相关的方法#define RGB(r,g,b) [UIColor colorWithRed:(r)/255.f \green:(g)/255.f \blue:(b)/255.f \alpha:1.f]#define RGBA(r,g,b,a) [UIColor colorWithRed:(r)/255.f \green:(g)/255.f \blue:(b)/2原创 2018-03-27 18:16:16 · 1174 阅读 · 0 评论 -
避免Block的循环引用
什么是循环引用,什么时候发生循环引用1 循环引用就是当self 拥有一个block的时候,在block 又调用self的方法。形成你中有我,我中有你,谁都无法将谁释放的困局。 self.myBlock = ^{ [self doSomething]; }; +-----------+ +-----------+ | self转载 2017-07-24 14:46:18 · 321 阅读 · 0 评论 -
weak和assign的区别-正确使用weak、assign
一、区别1.修饰变量类型的区别weak 只可以修饰对象。如果修饰基本数据类型,编译器会报错-“Property with ‘weak’ attribute must be of object type”。assign 可修饰对象,和基本数据类型。当需要修饰对象类型时,MRC时代使用unsafe_unretained。当然,unsafe_unretained也可能产生野指针,所以它名字是转载 2017-07-24 10:15:37 · 2411 阅读 · 0 评论 -
堆栈与队列的区别
队列只能在队头做删除操作,在队尾做插入操作.而栈只能在栈顶做插入和删除操作栈就是一个桶,后放进去的先拿出来,它下面本来有的东西要等它出来之后才能出来堆是在程序运行时,而不是在程序编译时,申请某个大小的内存空间。即动态分配内存,对其访问和对一般内存的访问没有区别。{堆是指程序运行是申请的动态内存,而栈只是指一种使用堆的方法(即先进后出)。}栈是先进后出的,但是于堆而言却没有这个特转载 2017-07-24 09:36:32 · 1076 阅读 · 0 评论 -
NSLog效率低下的原因以及NSLog宏定义
我是前言打Log是我们debug时最简单朴素的方法,NSLog对于objc开发就像printf对于c一样重要。但在使用NSLog打印大量Log,尤其是在游戏开发时(如每一帧都打印数据),NSLog会明显的拖慢程序的运行速度(游戏帧速严重下滑)。本文探究了一下NSLog如此之慢的原因,并尝试使用lldb断点调试器替代NSLog进行debug log。小测试测试下分别使转载 2017-07-05 09:10:30 · 1570 阅读 · 0 评论 -
NSMutableDictionry保存的数据乱,和NSArray结合得出自己想要的数据
NSMutableDictionry保存的数据比如{@"nihao ":@"1",@"no ":@"2",@"yes ":@"3",@"th":@"4",}使用 NSArray *allValue = [temp allValue]; 数据显示:“nihao”,"yes",@"th",@"no" 这样就造成了数据混乱解决方法:NSArray *scArr = NSArr原创 2017-07-04 15:57:58 · 293 阅读 · 0 评论