object_c2.0
qianlima210210
这个作者很懒,什么都没留下…
展开
-
可变参数的认识
可变参数是c语言函数中参数的个数和类型是不定的;具有可变参数的函数,称为可变参数函数。要注意的是,可变参数函数必须有一个以上的固定参数,可变参数必须作为最后一个函数参数。...代表的就是可变参数,将来可以传递任意个数、任意类型参数OC中的NSLog函数就是可变参数函数。FOUNDATION_EXPORT void NSLog(NSString *format, ...) NS_FORMA...原创 2019-12-06 11:59:52 · 731 阅读 · 0 评论 -
NSAssert小知识
NSAssert在debug下生效,在release下不起作用的。通常我们用下图切换版本模式:但在时常所有工作又都在debug下完成,有什么办法,在debug版本下也能禁用NSAssert呢?答案就是定义NS_BLOCK_ASSERTIONS宏,但是简单添加#define NS_BLOCK_ASSERTIONS,是起不了作用的,解决办法如下:...原创 2019-12-06 08:35:55 · 795 阅读 · 0 评论 -
NSCondition认识
@interface NSCondition : NSObject <NSLocking> {@private void *_priv;}//阻塞当前线程知道收到signaled信号,在调用这个方法之前必须调用lock方法- (void)wait;//阻塞当前线程知道收到signaled信号或到时,在调用这个方法之前必须调用lock方法- (BOOL)wait...原创 2019-12-03 10:56:48 · 583 阅读 · 0 评论 -
NSRecursiveLock认识
//在同一线程内可以多次获取锁(不会引发死锁);会记录获取锁和释放锁的次数,当二者平衡的时候,其它线程才可以获取锁成功。//个人觉得递归锁使用的场景不存在,干嘛在同一线程内无阻塞的多次获取锁?失去了锁设计的目的。@interface NSRecursiveLock : NSObject <NSLocking> {@private void *_priv;}- (B...原创 2019-12-03 09:47:33 · 649 阅读 · 0 评论 -
NSConditionLock认识
@interface NSConditionLock : NSObject <NSLocking> {@private void *_priv;}//使用条件初始化一个新创建的条件锁对象- (instancetype)initWithCondition:(NSInteger)condition NS_DESIGNATED_INITIALIZER;@property...原创 2019-12-03 09:26:00 · 727 阅读 · 0 评论 -
NSLock认识
@protocol NSLocking//试着获取锁,阻塞线程的执行直到获取到锁- (void)lock;//解锁- (void)unlock;@end@interface NSLock : NSObject <NSLocking> {@private void *_priv;}//试着获取锁,立即返回一个布尔值,标记是否获取成功- (BOOL)t...原创 2019-12-02 22:36:55 · 651 阅读 · 0 评论 -
GCD对象及使用
GCD对象及使用一、概述Objective-C语言下的GCD对象都被称为dispatch object对象,且都属于NSObject对象。dispatch object像Cocoa对象一样是引用计数的。因此,如果我们使用ARC,dispatch objects将被保留并自动释放,就像任何其他Objective-C对象一样。当使用MRC时,需要使用dispatch_retain和dispat...原创 2019-11-27 11:21:29 · 780 阅读 · 0 评论 -
Block底层实现
//步骤一:创建一个控制台应用,在main中添加块的测试代码#import <Foundation/Foundation.h>int main(int argc, const char * argv[]) { void (^testBlock)(void) = ^{ printf("msg log hehe"); }; test...原创 2019-11-26 11:15:17 · 629 阅读 · 0 评论 -
创建DISPATCH_SOURCE_TYPE_TIMER派发源
dispatch_source_t createTimerDispatchSource(uint64 interval, uint64 leeway, dispatch_queue_t queue, dispatch_block_t block)原创 2017-01-31 22:38:58 · 1192 阅读 · 0 评论 -
使用DISPATCH_SOURCE_TYPE_DATA_ADD派发源
NSLog(@"==========自定义ADD派发源==========="); dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); //1、先创建派发源 dispatch_source_t dispatchSource = dispatch_source_create(DISPATCH_SOURCE_TYPE_DATA_ADD, 0,原创 2017-01-31 22:33:25 · 1429 阅读 · 0 评论 -
创建DISPATCH_SOURCE_TYPE_READ派发源
BOOL myProcesFileData(char *buffer, size_t actutalSize, int fd){ NSString *result2 = [[NSString alloc]initWithBytes:buffer length:actutalSize encoding:4]; NSLog(@"%@", result2); //出来后,我想从文件里扔掉已读部分 /* 清空文件 */ ftruncate(fd,0);原创 2017-01-31 23:17:44 · 1763 阅读 · 0 评论 -
IOS和stock相关结构体演示
struct addrinfo hints, *res, *res0; memset(&hints, 0, sizeof(hints)); hints.ai_family = PF_UNSPEC; hints.ai_socktype = SOCK_STREAM; hints.ai_protocol = IPPROTO_TCP; int gai_error = getaddrinfo([hostString UTF8String], [@"16"原创 2017-02-12 18:23:34 · 938 阅读 · 0 评论 -
ios中和socket相关的结构体
ios中和socket相关的结构体原创 2017-02-12 18:19:41 · 922 阅读 · 0 评论 -
ios归档及存储
要点:1、归档即我们常说的序列化,有归档当然就有反归档,反归档即我们常说的反序列化。iOS对NSObject对象进行归档,前提是该对象实现了NSCoding协议;Foundation中的NSString、NSDictionary、NSArray、NSMutalbeString、NSMutalbeDictionary、NSMutableArray都直接或间接实现了NSCoding协议,所以你可以使用类方法:NSKeyedArchiver archivedDataWithRootObject:将对象归档为N原创 2017-01-14 09:03:06 · 1395 阅读 · 0 评论 -
重新认识下NSAutoreleasePool
//// main.m// AutoreleasePoolTemp//// Created by maqianli on 2016/10/31.// Copyright © 2016年 maqianli. All rights reserved.//#import <Foundation/Foundation.h>@interface MQLTest : NSObject@end@implementation MQLTest-(instancetype)init{原创 2016-10-31 15:24:29 · 331 阅读 · 0 评论 -
创建一个CocoaPod
大家都知道,CocoaPods的工程源代码都托管在github上,开发者所pod下来的第三方库、源代码或工程,可以放在github上,也可以放在自己的官网上。我在自己的github上创建一个仓库,用来放置pod出来的文件。这里创建了MQL201609191100仓库,如下图:原创 2016-09-19 15:50:21 · 831 阅读 · 0 评论 -
创建DISPATCH_SOURCE_TYPE_WRITE派发源
向文件或socket写入数据非常类似于读取数据,配置描述符为写入操作后,创建一个 DISPATCH_SOURCE_TYPE_WRITE 类型的dispatch source,创建好之后,系统会调用事件处理器,让它开始向文件或socket写入数据。当你完成写入后,使用 dispatch_source_cancel 函数取消dispatch source。写入数据也应该配置文件描述符使用非阻塞操作,虽然 dispatch_source_get_data 函数可以查看当前有多少可用写入空间,但这个值只是建议性的原创 2017-02-01 12:35:49 · 1041 阅读 · 0 评论 -
创建DISPATCH_SOURCE_TYPE_VNODE派发源
如果需要监控文件系统对象的变化,可以设置一个 DISPATCH_SOURCE_TYPE_VNODE 类型的dispatch source,你可以从这个dispatch source中接收文件删除、写入、重命名等通知。你还可以得到文件的特定元数据信息变化通知。在dispatch source正在处理事件时,dispatch source中指定的文件描述符必须保持打开状态。下面例子监控一个文件的文件名变化,并在文件名变化时执行一些操作。由于文件描述符专门为dispatch source打开,dispatch s原创 2017-02-01 12:36:51 · 941 阅读 · 0 评论 -
dispatch source理解
dispatch source和runLoop source都是用来监听事件的,你可以创建不同类型的dispatch source对象和runLoop source对象。dispatch source对象在事件产生时,会将事件处理器添加到响应dispatch queue ,稍后出队执行;runLoop source对象一般是NSObject对象,需要先加入到指定线程的runLoop中,利用runLoop这个循环来检测事件是否产生,如果产生则向NSObject对象或其代理发送消息。dispatch sourc原创 2017-01-31 16:35:13 · 727 阅读 · 0 评论 -
关于URL加载系统
关于URL加载系统原创 2015-07-22 15:01:30 · 1330 阅读 · 0 评论 -
静态数组与动态数组(都是顺序表)
静态数组与动态数组(都是顺序表)一、定义动态数组是在程序运行时创建的,可以根据用户需要,有效利用存储空间,分配的存储空间在堆上:int *h=new int[10];//可以对h重新赋值静态数组在声明时就已经确定大小的数组,即数组元素的个数固定不变,分配的存储空间在栈上::int h[10];//不可以对h重新赋值二、举例int h[10];int *h = (int*)ma...原创 2018-08-17 20:43:49 · 3211 阅读 · 0 评论 -
线性表之单链表
//// main.m// LinkedList//#import <Foundation/Foundation.h>typedef int DataType;typedef struct Node{ DataType data; struct Node *next;}Node, *NodePtr;void init(NodePtr ...原创 2018-08-18 22:41:59 · 375 阅读 · 0 评论 -
线性表之顺序表
里面有个隐患,就是使用了静态数组存放顺序表。实际中,必须用动态数组。 //// main.m// SequrenceList顺序表是由静态数组实现的////#import <Foundation/Foundation.h>#define LISTSIZE 10typedef int ElementType;//用结构体表示一个顺序表struct Sequ...原创 2018-08-18 22:39:55 · 280 阅读 · 0 评论 -
浅谈Objc之AOP编程
AOP编程,就是切片编程,是切入到函数实现(函数代码块实现)的编程。问题场景:当你想在某个已存在函数代码块实现之前或之后,添加另一部分额外功能时,但又不想直接将代码插入(这部分代码相对独立,插进去总觉得和原来代码是逻辑无关的),也不想通过父类统一添加(有可能创建多个父类?);看样子,在编译阶段解决此问题,有些难度;在运行阶段有办法吗?有,就是AOP。既然说的是OC中的AOP,就直说OC中如何实现的...原创 2018-05-18 10:25:55 · 341 阅读 · 0 评论 -
objc_property_t Ivar解析
返回objc_property_t类型的数组,每个objc_property_t元素描述一个属性的信息,这个数组中不会包括超类的属性 objc_property_t * class_copyPropertyList ( Class cls, unsigned int *outCount )原创 2017-02-09 21:14:00 · 1034 阅读 · 0 评论 -
Setter Semantics即@property中使用的修饰符
Setter Semantics即@property中使用的修饰符原创 2017-03-26 21:33:18 · 456 阅读 · 0 评论 -
ios断点续传:NSURLSession和NSURLSessionDataTask实现
苹果提供的NSURLSessionDownloadTask虽然能实现断点续传,但是有些情况是无法处理的,比如程序强制退出或没有调用cancelByProducingResumeData取消方法,这时就无法断点续传了。使用NSURLSession和NSURLSessionDataTask实现断点续传的过程是:1、配置NSURLRequest对象的Range请求头字段信息2、创建使用代...原创 2015-10-21 14:34:00 · 19343 阅读 · 12 评论 -
Java变参、C/C++/Objective_C变参
/* java中变参方法,变参即参数列表不固定,但是参数类型是一样的,在使用时,形参变量是数组类型的引用*/public class AppEnter{ public static void main(String[] args) throws Exception{ AppEnter.unfixedArguments("one", "two", "three"); AppE原创 2016-05-08 21:18:55 · 2628 阅读 · 0 评论 -
缓存管理
缓存管理URL加载系统整合了硬盘缓存和内存缓存,它允许应用减少对网络连接的依赖,并且对上次的缓存提供快速处理。缓存基于每个应用。NSURLConnection根据缓存策略查询缓存。原创 2015-07-23 17:50:41 · 1021 阅读 · 0 评论 -
重定向和其他请求变化
重定向和其他请求变化一些协议,如http,为服务器提供了一种方法,这种方法让服务器告诉我们的应用“需要访问的网络内容已经被移到另外一个URL地址了”。当需要重定向的时候,URL加载类通知他们的代理。如果你实现了代理,在代理方法中决定是否重定向。原创 2015-07-23 14:13:08 · 468 阅读 · 0 评论 -
辅助类
辅助类URL加载类(NSURLSession、NSURLDownload、NSURLConnection)使用另外两个辅助类提供额外的元数据---一个是请求类NSURLRequest, 一个是服务端的响应类NSURLResponse。原创 2015-07-23 11:10:53 · 593 阅读 · 0 评论 -
概述---概述URL加载系统里...
概述URL加载系统里,加载类如:NSURLSession/NSURLConnection,和许多重要的辅助类一起工作,辅助类可以修改加载行为。主要的辅助类分为5类:协议支持、认证和证书、cookie存储、配置管理和缓存管理。原创 2015-07-22 16:31:19 · 448 阅读 · 0 评论 -
URL加载
URL加载URL加载系统中的类,往往被用来获取URL指定的内容。你可以通过多种方法获取网络内容,这取决于你的应用需求。API的选择一方面取决于OS X或iOS系统的版本,另一方面取决于获取的内容放在文件里,还是放在内存里。原创 2015-07-22 18:26:05 · 884 阅读 · 0 评论 -
为什么使用了哈希算法的字典查集合找速度比全局遍历字典查集合速度快?
我们都使用过字典,如英汉字典、成语字典,图书的检索目录、电话簿等也可以看作广义上的字典。在计算机科学中,把字典也当成一种数据结构。我们把字典定义为“键- 值对” (Key-Value Pair) 的集合。根据不同的问题,我们为名字和值赋予不同的含义,比如,在英汉字典中,英文单词是名字,此单词的中文解释条目是值;在电话簿中,人名是名字,此人名对应的电话号码是值。字典最基本的操作包括:find( 查找 ) 、 add( 插入 ) 、 remove( 删除 ) ,分别用来从字典中检索数据、插入数据和删除数据。原创 2015-08-03 14:35:36 · 4925 阅读 · 2 评论 -
使用UIWebView加载本地或远程服务器上的网页
大家都知道,使用UIWebView加载本地或远程服务器上的网页,sdk提供了三个加载接口:- (void)loadRequest:(NSURLRequest *)request; - (void)loadHTMLString:(NSString *)string baseURL:(NSURL *)baseURL;- (void)loadData:(NSData *)data MIMETyp原创 2015-07-17 15:20:50 · 1760 阅读 · 0 评论 -
CLLocationManager地理定位
@implementation ViewController-(void)loadView{ [super loadView]; //应用启动时的默认操作 if (locationManager == nil) { locationManager = [[CLLocationManager alloc]init];原创 2015-03-16 18:48:50 · 704 阅读 · 0 评论 -
在内存中压缩及解压缩
在内存中压缩及解压缩原创 2015-04-20 17:58:30 · 2518 阅读 · 0 评论 -
自定义网络请求引擎
使用NSURLConnection、NSMutableURLRequest封装GET及POST请求,本例所有网络相关操作都放在了主线程上,如果请求任务过多,这样做是不可取的,稍后我将修改,将网络相关操作放在子线程上。原创 2015-03-12 11:58:50 · 638 阅读 · 0 评论 -
IOS后台多任务
IOS系统本身支持多任务,但是苹果处于对原创 2014-04-16 20:20:17 · 1594 阅读 · 0 评论 -
使用NSThread创建线程
大家都明白,创建线程的目的就是让程序同时做多件事情,尤其是对于需要长时间执行的操作,让用户等着他完成是不科学的。一般处理模式是,与用户息息相关的界面显示使用主线程,与界面相关的信息处理及逻辑处理我们会开启另外一个线程处理,这样不妨碍用户与界面的互动。本篇使用NSThread创建线程,来封装一个需要长时间的操作,处理完后再通知主线程刷新界面。可以直接使用NSThread创建线程,不过原创 2014-01-07 09:44:03 · 1681 阅读 · 0 评论