自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(59)
  • 收藏
  • 关注

原创 导航条显示隐藏问题(包含改变状态栏颜色)

开发中首页一般没有导航条,或者至少某些页面没有导航条,涉及到导航条的显示和隐藏,甚至如果在显示隐藏导航条的同时修改状态栏颜色,如果左侧右滑返回,导航条会出现问题,比如标题混乱,右滑一点就松开导致导航条不正常,再加上有的页面需要禁止右滑返回,看似很乱,以下demo解决上述问题,只需导入GXFBaseViewContoller类,在push之前,根据需要设置属性即可 https://github.c

2017-09-19 19:04:52 870

原创 iOS总结3

电商类的倒计时,不是简单的定义一个时间,每隔一秒减一下,而是由后台服务器来写的先从服务器请求剩余的时间,开一个定时器NSTimer,根据需求的时间间隔来定义定时器,刚开始变得慢,到最后越来越快,根据需求的时间格式,来显示对应的剩余时间 自动释放池使用场景,创建大量对象,开启一个子线程时,比如自定义NSOperation ,需要重写main方法,并在里面使用@autoreleasepoo

2017-08-10 12:56:54 390

原创 数据存储

1. 归档: 一般保存到Documents目录 student.data 2. plist: 也保存到Documents目录 plist形式 3. 偏好设置: plist形式, 名称是:应用的包名.plist 4. sqlite: 把数据库保存到Documents目录 代码:https://github.com/shimenyimeng/iOS-data-storage 参考

2017-03-14 09:25:22 389

原创 设置gif动图

使用SDWebImage加载动图。 https://github.com/shimenyimeng/iOS-gif-SDWebImage

2016-12-07 16:00:48 586

原创 本地和远程推送通知参考资料

iOS 10 中以前杂乱的和通知相关的 API 都被统一了,现在开发者可以使用独立的 UserNotifications.framework 来集中管理和使用 iOS 系统中通知的功能。在此基础上,Apple 还增加了撤回单条通知,更新已展示通知,中途修改通知内容,在通知中展示图片视频,自定义通知 UI 等一系列新功能,非常强大。 具体可以参考资源:活久见的重构 - iOS 10 Use

2016-11-15 15:46:35 311

原创 启动图片 Launch Image

点击 Assets.xcassets,点击下方的“+”,添加 LaunchImage,如图: 可以选择需要适配的样式,如图: 拖入相应大小的图片,图片名称可以任意命名,可以参考以下图片大小: 2X : 640*960 (4/4s) R4 : 640*1136 (5/5s/5c) R4.7 : 750*1334 (6) R5.5 : 1242*2208 (6 plus) 图片配置好

2016-11-04 12:55:09 629

原创 无限轮播实现思路(封装)

以10组为例,以第5组为中间,描述中的“第1个”代表第0个item 1. 请求数据,定义数组保存数据 2. 自定义轮播视图loopView    定义方法- (instancetype)initWithImages:(NSArray *)images;把images传过去,在此方法中设置代理、注册cell 3. 自定义flowLayout    设置一系列与cell布局有关的代码

2016-11-01 09:55:58 862

原创 pch文件设置

1. 创建pch文件 2. 在build settings中搜索pch文件名(必要时把precompile Prefix Header设置为YES) 3. 设置pch文件的路径,$(SRCROOT)/项目名/pch文件名    或者./项目名/pch文件名    或者finder中找到pch文件,直接把路径拖过来

2016-10-31 09:37:05 905

原创 AFNetworking 2.0 和3.0 的区别

1. AFNetworking在3.0版本中删除了基于 NSURLConnection API的所有支持。如果你的项目以前使用过这些API,建议您立即升级到基于 NSURLSession 的API的AFNetworking的版本。 2. AFNetworking 3.0现已完全基于NSURLSession的API,这降低了维护的负担,同时支持苹果增强关于NSURLSession提供的任何额外

2016-10-30 22:53:39 3366

原创 堆和栈的区别

1. 管理方式,栈编译器自动管理,堆程序员控制,容易产生内存泄漏 2. 大小,栈区小,连续先进先出,堆较大,不连续 3. 栈存放变量以及对象的指针,堆存放对象本身 4. 栈分配效率高于堆

2016-10-30 15:08:33 349

原创 SDWebImage的缓存机制

SDWebImage缓存机制的具体实现,先从内存取,内存没有再从沙盒取,沙盒有的话,要缓存到内存(每次都从沙盒取,然而沙盒频繁读取数据是很耗费性能的,所以把沙盒中的图片添加到缓存,下次再次滚动到此图片,缓存已经有了,就直接从缓存取出并赋值返回cell了),两者都没有才下载,操作一加入队列,首先缓存到沙盒,下载成功后才缓存到内存。下载操作类(NSOperation)、管理类(负责怎么获取图片,并且有

2016-10-30 14:55:37 418

原创 关于Runtime

1. 首先可以给系统的类扩展属性,这个属性是没有getter和setter方法的,需要实现,用objc_setAssociated...和objc_getAssociated... 2. 还可以方法交换,调用这个方法走的是另外一个方法,Method m1 = Class_getINstanceMethod... Method m2 = Class_getINstanceMethod... Met

2016-10-30 14:51:12 322

原创 iOS总结2

runLoop 定时器(NSTimer, CADisplayLink)需要加入runLoop,注意不用时需要销毁,因为是addTarget传入self,self又对定时器强引用。开发中只有这一个地方会用到runLoop c语言中没有对象,c语言中对象其实就是结构体 RAC接管了苹果的所有事件机制(addTarget,代理,通知,KVO,时钟,网络的异步回调),在信号内部通过3个

2016-10-30 14:39:31 515

原创 应用之间的跳转

涉及到跳转的几种常见情况 1. 使用第三方登录时,需要跳转到社交app,比如QQ,微信等。 2. 集成分享功能,目的是推广我们的app,分享消息到其他app,比如分享到QQ,微信等 3. 第三方支付,比如支付宝支付、微信支付等 4. 导航,需要跳转到系统自带的地图 5. 还有跳转到系统的app,比如打电话、发短信等 1. 应用跳转是根据协议头跳转的,想跳到哪个app,就需要去找

2016-10-29 10:14:40 824

原创 NSDate和NSValue

NADate int main() { NSDate *date = [NSDate date]; // 日期格式化类 NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; // y 年 M 月 d 日 // m 分 s 秒 H (24)时 h(1

2016-10-28 12:46:14 262

原创 NSDictionary

NSDictionary    key ----> value    索引 ----> 文字内容    里面存储的东西都是键值对    字典的创建    普通创建  NSDictionary *dict = [NSDictionary dictionaryWithObject:@"jack" forKey:@"name"];

2016-10-28 12:44:40 243

原创 NSArray和NSSet

Narray OC数组---只能存放OC对象 OC数组不能存放nil值 OC数组只能存放OC对象、不能存放非OC对象类型,比如int、struct、enum等 这个array永远是空数组 NSArray *array = [NSArray array]; 1、NSArray的创建 NSArray *array2 = [N

2016-10-28 12:42:56 478

原创 OC结构体

#import int main() { /* NSRange(location length) NSPoint\CGPoint NSSize\CGSize NSRect\CGRect (CGPint CGSize) */ // NextStep Foundation // 比较两个点是否相同(x、y) BOOL b = CG

2016-10-28 12:41:02 308

原创 @protocol 代理模式总结

1.协议的定义  @protocol 协议名称   // 方法声明列表....  @end      2.如何遵守协议  1> 类遵守协议  @interface 类名 : 父类名    @end    2> 协议遵守协议  @protocol 协议名称    @end    3.协议中方法声明的关键字  1> @required (默认)    要求实

2016-10-28 12:39:24 280

原创 block

block要掌握的东西  1> 如何定义block变量  int (^sumBlock)(int, int);  void (^myBlock)();    2> 如何利用block封装代码  ^(int a, int b) {     return a - b;  };    ^() {     NSLog(@"----------");  };    ^ {  

2016-10-28 12:38:07 253

原创 autoreleaseyi应用

1.autorelease的基本用法  1> 会将对象放到一个自动释放池中  2> 当自动释放池被销毁时,会对池子里面的所有对象做一次release操作  3> 会返回对象本身  4> 调用完autorelease方法后,对象的计数器不变    2.autorelease的好处  1> 不用再关心对象释放的时间  2> 不用再关心什么时候调用release    3.autor

2016-10-28 12:37:04 276

原创 @property的内存管理

1.set方法内存管理相关的参数 * retain : release旧值,retain新值(适用于OC对象类型) * assign : 直接赋值(默认,适用于非OC对象类型) * copy : release旧值,copy新值 2.是否要生成set方法 * readwrite : 同时生成setter和getter的声明、实现(默认) * readonly : 只会生成get

2016-10-28 12:35:47 295

原创 setter方法的内存管理

set方法的内存管理 当时用alloc或者new 创建一个对象,就必调用release 或autorelease 1.你想使用(占用)某个对象,就应该让对象的计数器+1(让对象做一次retain操作)  2.你不想再使用(占用)某个对象,就应该让对象的计数器-1(让对象做一次release) 3.谁retain,谁release 4.谁alloc,谁release

2016-10-28 12:34:31 336

原创 引用计数器的基本操作

1.方法的基本使用  1> retain :计数器+1,会返回对象本身  2> release :计数器-1,没有返回值  3> retainCount :获取当前的计数器  4> dealloc   * 当一个对象要被回收的时候,就会调用   * 一定要调用[super dealloc],这句调用要放在最后面    2.概念  1> 僵尸对象 :所占用内存已经被回收的对象,僵尸

2016-10-27 15:47:14 591

原创 SEL

SEL其实是对方法的一种包装,将方法包装成一个SEL类型的数据,去找对应的方法地址。找到方法地址就可以调用方法,其实消息就是SEL  1.把test2包装成SEL类型的数据  2.根据SEL数据找到对应的方法地址  3.根据方法地址调用对应的方法 间接调用test2方法 [p performSelector:@selector(test2)];   [p test3:

2016-10-27 15:45:57 393

原创 description方法

person.h #import @interface Person : NSObject @property int age; @property NSString *name; @end person.m #import "Person.h" @implementation Person // 决定了实例对象的输出结果 //- (NSString *)descript

2016-10-27 15:45:06 730

原创 类的本质

1.当程序启动时,就会加载项目中所有的类和分类,而且加载后会调用每个类和分类的+load方法。只会调用一次。  2.当第一次使用某个类时,就会调用当前类的+initialize方法  3.先加载父类,再加载子类(先调用父类的+load方法,再调用子类的+load方法)    先初始化父类,再初始化子类(先调用父类的+initialize方法,再调用子类的+initialize方法) 类本身

2016-10-27 15:44:05 401

原创 构造方法

person.h #import @interface Person : NSObject @property int age; @property id obj; @end person.m #import "Person.h" @implementation Person @end main函数 int main(int argc, const c

2016-10-27 15:42:52 221

原创 成员变量的作用域

@public : 在任何地方都能直接访问对象的成员变量  @private : 只能在当前类的对象方法中直接访问(@implementation中默认是@private)  @protected : 可以在当前类及其子类的对象方法中直接访问  (@interface中默认就是@protected)  @package : 只要处在同一个框架中,就能直接访问对象的成员变量    @int

2016-10-25 15:02:36 767

原创 点语法

person.h #import @interface Person : NSObject { int _age; NSString *_name; } - (void)setAge:(int)age; - (int)age; - (void)setName:(NSString *)name; - (NSString *)name; @end person.m

2016-10-25 15:00:26 224

原创 OC的三大特性之多态

多态  1.没有继承就没有多态  2.代码的体现:父类类型的指针指向子类对象  3.好处:如果函数\方法参数中使用的是父类类型,可以传入父类、子类对象  4.局限性:  1> 父类类型的变量 不能 直接调用子类特有的方法。必须强转为子类类型变量后,才能直接调用子类特有的方法 #import // 动物 @interface Animal : NSObject - (voi

2016-10-25 14:58:31 301

原创 OC的三大特性之继承

继承的好处:  1> 抽取重复代码  2> 建立了类之间的关系  3> 子类可以拥有父类中的所有成员变量和方法    注意点:  1> 基本上所有类的根类是NSObject #import /********Animal的声明*******/ @interface Animal : NSObject { int _age; double _weight;

2016-10-25 14:57:14 297

原创 OC三大特性之封装

set方法  1.作用: 提供一个方法给外界设置成员变量值,可以在方法里面对参数进行相应过滤  2.命名规范:  1> 方法名必须以set开头  2> set后面跟上成员变量的名称,成员变量的首字母必须大写  3> 返回值一定是void  4> 一定要接收一个参数,而且参数类型跟成员变量类型一致  5> 形参的名称不能跟成员变量名一样  */ - (void)setAge:(in

2016-10-25 14:56:17 264

原创 递归

递归的2个条件:  1.函数自己调用自己  2.必须有个明确的返回值 练习:设计一个函数,用来计算b的n次方 #include int pow2(int b, int n); int main() { int c = pow2(3, 2); printf("%d\n", c); return 0; } //递归的方式 int pow2(

2016-10-25 14:54:15 261

原创 指针

用指针交换两个参数的值: #include void swap(int *v1, int *v2); int main() { /* int a = 10; int b = 11; swap(&a, &b); */ int a2 = 90; int b2 = 89; swap(&a2

2016-10-25 14:48:17 229

原创 数组

几种写法:    int ages[5] = {10 , 11, 12, 67, 56};    int ages[5] = {10, 11};    int ages[5] = {[3] = 10, [4] = 11};    int ages[] = {10, 11, 14}; int main() { // 数组的定义格式: 类型 数组名[元素个数]; in

2016-10-25 14:47:03 222

原创 位运算符

按位与 & 按位异或 ^       1.相同数值进行异或,结果肯定是0,比如9^9      2.交换 9^5^6 == 9^6^5      3.任何数值跟0进行异或,结果还是原来的数值,9^0 == 9      4.a^b^a == a^a^b == 0^b == b 按位取反 ~      ~0000 0000 0000 0000 0000 0000 0000

2016-10-25 14:45:45 245

原创 for循环嵌套

提示用户输入一个正整数n,如果n=5,就输出下列图形,其他n值以此类推 ***** **** *** ** * #include int main() { // 1.定义一个变量存储用户输入的值 int n = 0; // 一定要初始化 // 2.判断n值合不合理 while (n <= 0) { //

2016-10-25 14:44:34 465

原创 for循环

for (语句1; 条件; 语句2)  {     循环体  }    语句1:初始化语句  语句2:增量语句(执行完循环体后再执行的语句)    1.for一开始就会执行一次语句1(整个for循环只会执行一次)  2.判断条件是否成立,如果条件成立,就会执行一次循环体,然后就会执行语句2,再次判断条件是否成立   #include int main() { /

2016-10-25 14:43:27 289

原创 while循环

格式: while (条件)  { 循环体  } 运行原理  1.如果一开始条件就不成立,永远不会执行循环体  2.如果条件成立,就会执行一次循环体,执行完毕,再次判断条件是否成立......   break 直接结束整个while循环   continue 结束当前的循环体,进入下一次循环体的执行 int main() { // 1.先确定需要重复执行

2016-10-25 14:42:11 448

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除