自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(53)
  • 资源 (3)
  • 问答 (1)
  • 收藏
  • 关注

原创 奇葩的UITableView

最近写一个复用的下拉菜单,其中用到了UITableView,奇怪的是,当我使用下拉菜单的时候,UITableView最顶上的cell上面,还会出现一段空白(这个并不是headView),最后经过万能的谷歌发现,这是ios7的特性,iOS7在Conttoller中新增了这个属性:automaticallyAdjustsScrollViewInsets,当设置为YES时(默认YES),如果视图里面存在唯

2016-04-11 01:08:40 338

原创 iOS 类别 ---不能添加属性

category只能扩展类的方法,不能扩展类的属性。如果要扩展类的属性,可以用associative,这个相对于category来说用的比较少,而且他还用到运行时编程,必须使用@interface UIView (Loading)@property (nonatomic, strong) MBProgressHUD *hub;@end@implementation UIView (Loading)s

2016-03-11 20:51:59 816

转载 NSString什么时候用copy,什么时候用strong

大部分的时候NSString的属性都是copy,那copy与strong的情况下到底有什么区别呢?比如:@property (retain,nonatomic) NSString *rStr;@property (copy, nonatomic) NSString *cStr;- (void)test:{ NSMutableString *mStr = [NSMutableStrin

2016-01-20 18:27:16 528

原创 iOS @property

@property会自动合成存取方法,若不想令编译器自动合成存取方法,则可自己实现。①自己写getter和setter,但如果只写了一个,另一个,还是由编译器来自动合成; ②使用@dynamic,它会告诉编译器:不要自动创建实现属性所用的实例变量,也不要为其创建存取方法。而且,在编译代码的时候,编译器也不会报错,因为,它觉得在运行期能找到这些方法。

2016-01-20 18:01:40 309

原创 iOS---NSArray和NSSet的区别

NSArray和NSSet所实现的基本功能其实都差不多,这和其他语言如java有很大差别,NSArray的存储数据的方式是连续的,后一个数据在内存中是紧接着前一个数据的,而NSSet在存储的时候并不是需要一块连续的内存,有可能我第一个数据在这个地方,而第二个数据和第一个数据中间还隔得有其他内容,我只是在存储第二个数据的时候,随便找了个可以放下的位置就存下来了那么他们这么做的好处是什么呢?NSSet由

2016-01-20 16:17:07 483

原创 View Controller的生命周期

1、initWithNibName 、 init init中应该只有相关数据的初始化,而且这些数据都是比较关键的数据,不能出现创建view的代码,也不能够调用self.view,否则会导致viewController创建view。 如果是外部通过调用initWithNibName:bundle指定nib文件名的话,ViewController记载此nib来创建Vi

2016-01-06 14:44:44 398

原创 UIWindow

UIWindow ,是iOS程序启动完毕后,创建的第一个视图控件,接着创建控制器的view,最后将控制器的view添加到UIWindow上,于是控制器的view就显示在屏幕上了。 (补充:创建的第一个对象是UIApplication)—获取UIWindow (1)[UIApplication sharedApplication].windows 在本应用中打开的UIWindow列表,这样就可以

2016-01-06 11:16:43 323

原创 iOS initWithCoder, initWithFrame那些事儿

initWithFrame? initWithFrame是用来根据指定的CGRect,初始化并返回一个新的是视图对象的方法什么时候调用initWithFrame? ①当我们使用xib文件的时候,initWithFrame方法是不会被调用的。因为xib已经知道了如何初始化该View!这时候,将会调用initWithCoder方法 ②使用编程来编写View,将会调用initWithFra

2015-11-01 11:07:46 542

原创 iOS性能优化那些事

初级篇: 1. 用ARC管理内存 2. 在正确的地方使用reuseIdentifier 3. 尽可能使Views不透明 4. 避免庞大的XIB 5. 不要block主线程 6. 在Image Views中调整图片大小 7. 选择正确的Collection 8. 打开gzip压缩在第4点中,我们需要注意到,当你加载一个XIB的时候,所有的内容都会被放在内存里,包括图片(声音文件–OS

2015-10-29 00:17:06 397

原创 iOS 缓存机制 (以SDWebImage 缓存图片为例)

在iOS开发过程中,经常要用到缓存机制,那么如何较为好的设计一个缓存机制呢?在这里,小编以SDWebImage为例,说一下这个缓存机制:UIImageView+WebCache: setImageWithURL:placeholderImage:options: 先显示 placeholderImage ,同时由SDWebImageManager 根据 URL 来在本地查找图片。SDWebIm

2015-10-26 14:54:27 1232

原创 GCD---那些事儿

GCD 全程为 Grand Central Dispatch 是Apple开发多线程的一种解决方法。dispatch queue 分为以下三种: ① 运行在主线程的 Main queue,通过dispatch_get_main_queue来获取; ② 并行队列 global dispatch queue,通过dispatch_get_global_queue来获取,,由系统创建三个不同优先

2015-10-26 14:48:03 330

原创 atomic && nonatomic那些事儿

atomic: 设置成员变量的@property属性时,默认为atomic,提供多线程安全。 加了atomic,setter函数会变成下面这样: {lock} if (property != newValue) {

2015-10-26 00:14:21 236

原创 iOS runloop 那些事儿

RunLoop是事件接收和分发机制的一个实现,提供了一种异步执行代码的机制,不能并行执行任务。在主队列中,Main RunLoop直接配合任务的执行,负责处理UI事件、定时器以及其他内核相关事件。RunLoop目的:保证程序执行的线程不会被系统终止。RunLoop使用场景:当需要和该线程进行交互的时候才会使用到。主线程默认有Runloop。当自己启动一个线程,如果只是用于处理单一的事件,则该

2015-10-24 00:40:24 345

原创 Objective-C RunTime那些事儿

RunTime-简称运行时。就是系统在运行的时候的有些机制,其中最主要的就是消息机制。对于C语言来说,函数的调用在编译的时候就会决定调用哪一个函数。编译完成之后,将会直接顺序执行,无任何的二义性。而OC到底函数调用为消息发送,属于动态调用过程。在编译的时候并不能决定真正调用哪个函数(事实证明,在编 译阶段,OC可以调用任何函数,即使这个函数并未实现,只要申明过就不会报错。而C语言在编译阶段就会报

2015-10-23 00:00:32 338

原创 类方法和实例方法 那些事儿

Objective-C中的方法有两种:类方法(class method)和实例方法(instance method)。类方法被限定在类范围内,不能被类的实例调用(即脱离实例运行)。alloc就是一种类方法。实例方法限定在对象实例的范围内(即实例化之前不能运行)。init就是一种实例方法,被alloc方法返回的对象实例调用。NSObject *object = [[NSObject alloc] in

2015-10-22 22:39:06 2218

原创 UIViewController中的loadView

每次访问UIViewController的view(如controller.view/ self.view)如果view为nil,那么将会调用loadView(前提是view的UIViewController不为空)作用负责创建UIViewController的view,也就是我们可以用来自定义VC的View如果我们没有重载这个方法。他就会调用[super loadView]①、它会先去查找与U

2015-09-08 11:15:10 402

原创 Category添加属性

前言在一般情况下,我们是不能向Category中添加属性的,只能添加方法,但有些情况向,我们确实需要向Category中添加属性实例#import <Foundation/Foundation.h>#import <objc/runtime.h>@interface NSObject (CategoryWithProperty)/** * 要在Category中扩展的属性 */@prope

2015-09-08 10:33:06 414

原创 CABasicAnimation animationWithKeyPath

小编在编写iOS动画的时候,发现CABasicAnimation animationWithKeyPath中的路径竟然可以随便改,但是总觉得不对劲,就小小百度和实践了一下,发现后面的string是不能随便填写的,必须按照官方的那些string来编写。 例如:transform.rotation.y是根据y轴来旋转;transform.rotation.x则是根据x轴来旋转。

2015-08-01 10:19:58 364

原创 Objective-C动态类型(isKindOfClass,isMemberOfClass)

-(BOOL) isKindOfClass: classObj判断是否是这个类或者这个类的子类的实例-(BOOL) isMemberOfClass: classObj 判断是否是这个类的实例

2015-07-29 09:41:20 375

原创 自定义UIBarButtonItem

自定义UIBarButtonItem我们经常使用UIBarButtonItem的时候,都会发现本机的不能满足我们的要求。 直接上代码:UIBarButtonItem *cancleBT = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action

2015-07-27 20:33:47 306

原创 数组和指针的关系

数组名本身就是地址或指针值,数组和指针都可以通过下标来访问。尽管指针和数组在访问内存的方式上几乎是相同的,但它们还是有区别的。指针变量可以取不同的地址作为它的值,但数组本身就是个地址,它是固定的。假设a是个数组,i是个int变量。有一个基本的事实是:a[i] 相当于 *(a + i)表达式a[i]的值就是数组第i个元素(从0开始计数)的值,而*(a + i)是对表达式a + i进行解引用。后者是个指

2015-05-08 12:39:05 584

原创 IOS---网络错误

在使用iOS中的URL加载系统时,虽然手机与服务器之间的连接可能会出现各种各样的问题,不过大致可以分为三种错误类别:①OS错误;②HTTP错误;③应用错误OS错误①没有网络—如果设备没有数据网络连接,那么连接尝试很快就会被拒绝或者失败。这些错误可以通过Apple提供的Reachability框架检测; ②无法路由到目标主机—设备可能有网络连接,不过目标可能位于隔离的网络中或是离线状态; ③没有应

2015-05-04 20:11:14 858

原创 IOS --- NSFetchResultsController

NSFetchedResultsController和UITableView集成起来处理数据具有强大的灵活性。首先得到的好处是不需要将数据记录进行分页,不然,按照传统的做法,需要先查询出总的记录,然后再从纪录里面过滤,这样会进行两次操作,对内存消耗很大,处理不好,程序甚至可能崩溃。使用NSFetchedResultsController类不仅简单,还具有更高的性能,这个类自动帮助你记录分页的事情,得

2015-05-03 00:24:49 587

原创 IOS ---网络异步请求

异步请求使用与同步和队列式异步请求相同的对象,只不过又增加了另一个对象,即NSURLConnectionDelegate: 上代码:#import "ViewController.h"NSInteger totalDownLoaded = 0;@interface ViewController ()@end@implementation ViewController- (void)viewDidL

2015-04-30 15:49:48 598 1

原创 IOS --- 单例模式

dispatch_oncedispatch_once函数是保证在应用程序执行中只执行一次指定处理的API。下面这种经常出现的用来进行初始化的源代码可通过dispatch_once函数简化:static int initialized = NO;if (initalized == NO){ /* *初始化 */ initialized = YES;}如果使用disp

2015-04-30 01:56:20 833 2

翻译 IOS ---两种网络请求的最佳实践

在使用URL 加载系统时,主要的两种方法可以执行HTTP请求和接收响应:一、同步请求的最佳实践只在后台线程中使用同步请求,除非确定请求访问的是本地文件资源,否则请不要再主线程上使用;只有在知道返回的数据不会超出应用的内存时才使用同步请求。记住,整个响应体都会在位于代码的内存中。如果响应很大,那么可能导致应用出现内存溢出问题。此外,当代吗将响应解析为所需的格式时可能需要复制返回的数据,这会导致内存

2015-04-27 01:22:59 565

原创 HTTP与HTTPS最重要的差别

HTTP与HTTPS之间最重要的差别在于会话的连接建立阶段。在TCP连接建立好、HTTP请求发送前,客户端与服务器之间必须建立SSL会话。SSL会话建立包含多个阶段:客户端与服务器协商使用何种密码、交换公钥、验证协商以及验证身份(可选)。当SSL会话建立完毕后,在TCP连接之上传输的所有数据都将是加密的。

2015-04-25 20:11:08 497

原创 IOS---Blcok(截获的自动变量)

先上两段代码://1int val = 0;void (^blk)(void) = ^{val = 1};//2id array = [[NSMutableArray alloc] init];void (^blk)(void) = ^{ id obj = [[NSObject alloc] init]; [array addobject:obj];};稍微用过block的

2015-04-24 11:25:29 783

翻译 IOS---Block(截获自动变量值)

先上代码:int main(){ int dmy = 256; int val = 10; const char *fmt = "val = %d\n"; void (^blk)(void) = ^{print(fmt, val)}; val = 2; fmt = "These values were changed. val = %d\n";

2015-04-24 11:14:53 665

原创 IOS---UITableViewCell自适应行高(非AutoLayout)

如题所示,本程序是使用非AutoLayout写的UITableView自适应行高,之后笔者将会写一个基于AutoLayout的自适应行高的小demo。 PS:此小程序只适用于刚接触IOS的小朋友,只用做参考,毫无技术性,大神勿喷。上代码://UITableViewCell#import <UIKit/UIKit.h>@interface commentaryCell : UITableViewC

2015-04-23 15:28:36 698

原创 IOS---自动初始化各个ViewController(可用于UITableView中的跳转)

直接上代码//设置各个ViewController的名字 NSString *viewControllerClassName = [NSString stringWithFormat:@"ALiOSDemo%@ViewController", @(indexPath.row + 1)]; Class viewControllerKlass = NSClassFromString(vi

2015-04-23 11:15:16 1025

原创 IOS之AutoLayout

个人感觉,现阶段IOS开发必备技能—–AutoLayout。苹果公司也一直在推荐这个布局方法。现在我们来简单了解一下。直接上代码: UIView *backgroundView = [[UIView alloc] init]; [backgroundView setTranslatesAutoresizingMaskIntoConstraints:NO]; background

2015-04-23 00:50:18 429

原创 IOS数据存储之---Core Data

前言个人理解core data是数据持久化存储的最佳方式;存储的数据类型可以是:SQLite数据库、XML、二进制、内存、或自定义的数据类型;能够合理管理内存,高效构成(1)NSManagedObjectContext(被管理的数据上下文)操作实际内容(操作持久层)作用:插入数据,查询数据,删除数据(2)NSManagedObjectModel(被管理的数据模型)数据库所有表格或数据结

2015-04-22 00:24:20 439

原创 IOS UITableView 局部刷新

//局部section刷新 NSIndexSet * nd=[[NSIndexSet alloc]initWithIndex:1];//刷新第二个section [tview reloadSections:nd withRowAnimation:UITableViewRowAnimationAutomatic]; //局部cell刷新 NSIndexPath *te=

2015-04-22 00:23:59 528

原创 heap和stack的差别

在进行C/C++编程时,需要程序员对内存的了解比较精确。经常需要操作的内存可分为一下几个类别:栈区(stack):由编译器自动分配和释放,存放函数的参数值、局部变量的值等。其操作方式类似于数据结构中的栈;堆区(heap):一般有程序员分配和释放,若程序员不释放,程序结束时可能由操作系统回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表;全局区(静态区)(static):全局变量和静态

2015-04-19 15:53:42 751

原创 修改IOS app名字

我们一开始初建app,我们模拟器和真机上显示的都是我们的项目名称,但是后来我们想改app名称,似乎看网上大多数教程都太复杂了。现在小笔提供一个只是修改app显示名称的方法: 直接在Info.plist中添加或者修改Bundle display name即可

2015-04-19 11:19:58 706

原创 iOS开发- TableView不显示没内容的Cell

直接加入这局代码就可以了。tv.tableFooterView = [[UIView alloc] init];

2015-04-17 15:04:39 603

原创 25端口

25端口为SMTP服务器所开放,主要用于发送邮件,如今绝大多数邮件服务器都使用该协议。 比如在使用电子邮件客户端程序的时候,在创建账户时就会要求输入SMTP服务器地址,该服务器地址默认情况下使用的就是25端口。

2015-04-15 21:08:06 640

原创 单链表的建立/测长/打印

单链表的创建过程有以下几步:1 ) 定义链表的数据结构;2 ) 创建一个空表;3 ) 利用malloc ( )函数向系统申请分配一个节点;4 ) 将新节点的指针成员赋值为空。若是空表,将新节点连接到表头;若是非空表,将新节点接到表尾;5 ) 判断一下是否有后续节点要接入链表,若有转到3 ),否则结束;//// main.c// simple-list//// Created by DO

2015-04-15 20:18:52 450

原创 IOS 使用AVFoundation 扫描条形码、二维码等

在IOS7之前,我们一般都是通过ZXing或者ZBar来进行二维码、条形码的扫描识别。但在IOS7之后,我们可以直接调用AVFoundation来进行码的扫描识别,一下是代码(当然要导入AVFoundation.framework)- (void)setupCamera{ // Device self.device = [AVCaptureDevice defaultDeviceW

2015-04-05 17:49:29 3008

Eclipse集成开发环境介绍

Eclipse集成开发环境介绍

2013-08-29

多元函数的基本概念

十大mf.sd,mfs.d,m方式大门方面发什么的f.samd,f.m.sd,m发什么的f.ms.,df吗。

2013-04-05

C++RMB类代码

不错。时间的离开减肥了开始觉得开放时间的饭困了就睡来得快解放路上空间大幅开了家阿里看见发了圣诞节疯了快睡觉啊了副驾驶打开加拉时间稍等。

2013-04-05

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

TA关注的人

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