自定义博客皮肤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 821

原创 iOS总结3

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

2017-08-10 12:56:54 343

原创 数据存储

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

2017-03-14 09:25:22 349

原创 设置gif动图

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

2016-12-07 16:00:48 522

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

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

2016-11-15 15:46:35 282

原创 启动图片 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 581 1

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

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

2016-11-01 09:55:58 810

原创 pch文件设置

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

2016-10-31 09:37:05 842

原创 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 3280

原创 堆和栈的区别

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

2016-10-30 15:08:33 316

原创 SDWebImage的缓存机制

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

2016-10-30 14:55:37 366

原创 关于Runtime

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

2016-10-30 14:51:12 288

原创 iOS总结2

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

2016-10-30 14:39:31 476

原创 应用之间的跳转

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

2016-10-29 10:14:40 704

原创 NSDate和NSValue

NADateint 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 225

原创 NSDictionary

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

2016-10-28 12:44:40 210

原创 NSArray和NSSet

NarrayOC数组---只能存放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 440

原创 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 281

原创 @protocol 代理模式总结

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

2016-10-28 12:39:24 245

原创 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 213

原创 autoreleaseyi应用

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

2016-10-28 12:37:04 245

原创 @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 254

原创 setter方法的内存管理

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

2016-10-28 12:34:31 296

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

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

2016-10-27 15:47:14 555

原创 SEL

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

2016-10-27 15:45:57 328

原创 description方法

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

2016-10-27 15:45:06 698

原创 类的本质

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

2016-10-27 15:44:05 342

原创 构造方法

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

2016-10-27 15:42:52 193

原创 成员变量的作用域

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

2016-10-25 15:02:36 728

原创 点语法

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

2016-10-25 15:00:26 203

原创 OC的三大特性之多态

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

2016-10-25 14:58:31 271

原创 OC的三大特性之继承

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

2016-10-25 14:57:14 261

原创 OC三大特性之封装

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

2016-10-25 14:56:17 234

原创 递归

递归的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 217

原创 指针

用指针交换两个参数的值:#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 202

原创 数组

几种写法:   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 193

原创 位运算符

按位与 &按位异或 ^      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 196

原创 for循环嵌套

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

2016-10-25 14:44:34 429

原创 for循环

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

2016-10-25 14:43:27 253

原创 while循环

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

2016-10-25 14:42:11 390

空空如也

空空如也

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

TA关注的人

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