随笔常用属性
文章平均质量分 86
爱尚开发
知识是需要沉淀的,沉淀下来的才是你的。
展开
-
iOS: ARC和非ARC下使用Block与循环引用问题
1. Block的声明和线程安全Block属性的声明,首先需要用copy修饰符,因为只有copy后的Block才会在堆中,栈中的Block的生命周期是和栈绑定的,可以参考之前的文章(iOS: 非ARC下返回Block)。另一个需要注意的问题是关于线程安全,在声明Block属性时需要确认“在调用Block时另一个线程有没有可能去修改Block?”这个问题,如果确定不会有这种情况发生的原创 2016-01-21 19:45:45 · 828 阅读 · 0 评论 -
你真的了解iOS代理设计模式吗?
我之前的博客中有delegate相关的介绍,不过今天看到一篇介绍delegate的文章,感觉写的太好,太系统了,就在这里mark一下,分享给大家你真的了解iOS代理设计模式吗?在项目中我们经常会用到代理的设计模式,这是iOS中一种消息传递的方式,也可以通过这种方式来传递一些参数。这篇文章会涵盖代理的使用技巧和原理,以及代理的内存管理等方面的知识。我会通过这些方面的知识,转载 2016-07-21 12:16:09 · 1031 阅读 · 0 评论 -
深入理解堆和栈的区别
一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回 收 。注意它与数据结构中的堆是两原创 2016-02-16 15:05:40 · 506 阅读 · 0 评论 -
ios NSCharacterSet使用讲解
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib. - (void)viewDidLoad { [super viewDidLoad]; [self test]转载 2015-12-25 18:00:16 · 1704 阅读 · 0 评论 -
浅析NSSet与NSArray之间的区别
相信我们大多数人都是会在项目中用到NSArray,但是用到NSSet的应该是很少的,而NSArray和NSSet都作为一个集合,为什么我们在iOS的项目中很少用NSSet呢?今天我查了一些资料,看了看NSArray和NSSet之间的区别: 首先NSArray存的数据是有序排列的,并且数组中的元素可以一样,而NSSet存的数据是无序的,而且元素是不能一样的,也就是在NSSet中的元素是原创 2015-12-28 13:45:51 · 1011 阅读 · 0 评论 -
iOS下载图片之SDWebImage的研究与使用
API documentation is available at [CocoaDocs - SDWebImage](http://cocoadocs.org/docsets/SDWebImage/)### Using UIImageView+WebCache category with UITableViewJust #import the UIImageView+WebCach原创 2016-01-13 14:46:46 · 472 阅读 · 0 评论 -
self = [super init]意义
在OC中为什么要使用self = [super init]方法呢,今天在一本书中看到了这样一句话:将[super init]的结果赋给self是Objective-C的标准惯例,这么做是为了防止超类在初始化过程中返回的对象不同于原先创建的对象。原创 2016-01-13 17:26:32 · 380 阅读 · 0 评论 -
iOS 浅析 isEqualToString和==之间的区别
相信我们在项目中都会时不时用到“isEqualToString”和“==”那么这两者之间到底有什么区别呢,我们何时用“isEqualToString”何时用"=="呢?比较两个字符串是否相等时,应该用isEqualToString,不能仅仅用"==", NSString *str12= [[NSString alloc]initWithCString:"123" encoding:N原创 2016-01-14 11:13:24 · 2706 阅读 · 0 评论 -
浅析@synthesize与@dynamic的最本质区别
在项目中,用到了运行时,于是我就对运行时在前两天有了一个更好的理解,可是,问题来了,我写了一个@dynamic,后边还写了set get 方法,使我联想到了@synthesize,因为这两个实在太像了,于是我做了一个测试,以为我知道@syn是系统自动生成set get 方法,程序猿无需自己来实现set和get方法,于是@dy我也想省事,可是经过测试,是不幸的,看下边报错代码:*** Termi原创 2016-01-20 14:07:37 · 463 阅读 · 0 评论 -
UIView的layoutSubviews和drawRect方法何时调用
转自:http://jianyu996.blog.163.com/blog/static/112114555201305113018814/首先两个方法都是异步执行。layoutSubviews方便数据计算,drawRect方便视图重绘。 layoutSubviews在以下情况下会被调用: 1、init初始化不会触发layoutSubviews。2转载 2016-08-01 14:42:06 · 318 阅读 · 0 评论 -
谈Objective-C block的实现
大神写的,我转过来大家和大家一块分享,写的太好,太底层了,话不多说,快看文章目录1.前言2.实现方式2.1.数据结构定义2.2.研究工具:clang3.NSConcreteGlobalBlock 类型的 block 的实现4.NSConcreteStackBlock 类型的 block 的实现5.NSConcreteMallocBlo转载 2016-07-21 17:51:38 · 458 阅读 · 0 评论 -
IOS 字符串的拼接问题
今天在写入读出一个Plist文件的时候,遇到了一个小小的问题,卡了我十几分钟,在这写一下,以后记住。是这样的,Plist是一个字典,套了两个字典一个数组,这两个字典中都又套了一个数组和字符串,数组中也是一些字符串元素。我在读出这个plist文件的时候,把数组中的元素一个个读出来了,可是我怎么也没发把元素拼成一个长字符串,最后用了 myStr = [HVArr componentsJoin原创 2016-01-13 10:19:45 · 1599 阅读 · 0 评论 -
iOS 几种初始化的分析比较
整天都在初始化,好几种初始化方法,今天有时间了,就来总结一下iOS中的几种常见初始化方法。1,下边这一种是最简单的初始化,不过一定要记着,在初始化的时候一定要先掉用父类的初始化。- (instancetype)init { if (self = [superinit]) { } return self;原创 2016-01-05 16:28:37 · 2273 阅读 · 1 评论 -
iOS 开发之#Import #include @class区别
这个我在之前有说过,这次再详细说一下#import与#include区别:1,一般来说,导入objective-C头文件时用#import, 包含c/c++头文件时用#import2.#import确保一个头文件只能被导入一次,这使你在地柜包涵中不会出现问题,所以 #import比起#include的好处是不会引起交叉编译#import与@class区别:1.#Import会包原创 2016-01-04 13:05:41 · 1094 阅读 · 0 评论 -
lazy(懒加载)模式和异步加载模式详解
说到懒加载,其实就是延迟会再加载,没有想象中的那么神秘,其实我们时刻都在用懒加载, 第一种:简单的延迟创建控件,比如说,创建一个属性变量,我们用get方法来获取生成这个变量就是用到了懒加载,详细点说就是,又一个label属性变量,我们如果只直接初始化的时候创建它,当然可以,但是会消耗内存,一个view中有一个,两个可以,如果有几十个呢,会不会就有明显的效果呢,所以这个时候我们会用到原创 2016-07-14 11:20:43 · 14576 阅读 · 0 评论 -
iOS 类别(类目)与延展(扩展)区别讲义
我们在项目中或多或少都会接触到类别,延展,那么到底类别是什么,而延展又是什么呢?今天我们一块来探讨下:类别就是为已存在的类添加新的方法,但是不能添加实例变量。比如系统的类,我们看不到他的.m文件,所以没有办法用直接添加方法的方式去实现。这个时候我们可以使用类别来给它添加一些新的方法供我们使用,再具体点说就是,比如说NSString类有10个方法(假设,具体几个,我也没注意),但是呢,NSStr原创 2016-01-14 17:42:16 · 5104 阅读 · 0 评论 -
setValue:forKey:与setObject:forKey:
这两者的区别其实在我之前一篇博客很相似,那篇是取,这篇是赋值。在项目中大家肯定都会用到这个,当你不想做非空判断,或者说set的这个值可能是不存在的,你应该怎么用 用setObject:forKey:肯定是会crash的,但是你换成setValue:forKey:就可以略过这一项,就是这么强大,以后用什么你自己选吧原创 2016-08-10 17:21:34 · 473 阅读 · 0 评论 -
ValueForKey与ObjectForKey区别
今天是真闲,这两个月难得还有这么清闲的时间,就再写一篇博客和大家分享一下,不知道大家在平时项目中是否注意到了,我们在从字典里边取值的时候有时候会用valueForKey,而有时候则是用objectForKey,那么问题来了,这两者之间到底是有什么区别呢,我不知道是不是大家都像我一样,在从字典里边取值的时候想起来那个方法就用哪个方法来取值,反正也没出现过什么问题,也就没想着到底什么时候该用value原创 2016-04-14 15:10:47 · 2110 阅读 · 0 评论 -
sizeToFit与adjustFontsToFit
看到这个题目,我想大家肯定都知道是什么意思,我今天在做项目的时候就在这个小问题上卡了我一会,是这样的,需求是一个label的宽度固定,但是字体的多少会变化,这个label中可能就三 个字,下个label中可能就八个字,固定了label的宽,在三个字的时候,显示正常,可是在八个字的时候呢,会出现什么后果呢,肯定会显示不完全啊,好吧,脑袋中什么也没想,直接就是加这个sizeToFit呗,肯定就解决问题原创 2016-05-11 12:26:46 · 429 阅读 · 0 评论 -
学会使用WorkSpace
用workspace加上cocoapods很方便我们的项目管理,创建workspace:file—>new---->workspace,创建完成,然后就是把Xcode文件AddFilesTO 这个workspace中即可:见下图:第一步:点击workspace后出现下图:第二部:第三部:会在你创建的目录下出现这个文件:第四部:双击这个文件,出现下图:第五步:点击Ad原创 2016-01-20 15:24:31 · 9352 阅读 · 0 评论 -
版本比对之CFBundleShortVersionString与CFBundleVersion的区别
CFBundleVersion与CFBundleShortVersionString都是app的版本号,可是我们在项目中会做升级的时候应该对之前的版本号进行比对,以此来判断我们是否需要下载配置文件做升级,可是这两者究竟有什么区别呢,今天遇到这个问题了,就在网上看了资料,是这样的:在我们提交更新的app至appstore中时,需要在**.plist中设置app的version信息。Bun原创 2016-01-21 18:38:13 · 4056 阅读 · 0 评论 -
ios深究release与nil
今天再coding的时候,群上有人@了我,问了我一个很基础的问题,ARC中的nil是不是就是mrc中的release.吓我一跳,让他把工程改为MRC,然后又赶紧跟他解释,才使他幡然醒悟。 那么到底nil是做什么的,release又是做什么的呢?从字面来说,nil就是把对象滞空,而release就是释放对象,很明显,两个不是一样的, nil只是切断了内存中的对象与指针之间的关联,而r原创 2016-01-22 16:51:11 · 848 阅读 · 0 评论 -
将颜色转化为图片
看到题目,遇到过这样问题的同学应该是不陌生的,没遇到过这样需求的可能会有点不知所云,通过一个颜色,转化为图片,再用,话不多说,直接上代码:UIImage* S_CreateImageWithColor(UIColor *color) { CGRect rect = CGRectMake(0.0f, 0.0f, 1.0f, 1.0f); UIGraphicsBeginImag原创 2016-06-07 14:51:58 · 450 阅读 · 0 评论 -
终止条件关键字之break continue return
大家对这几个关键字应该都不陌生,原创 2016-07-13 17:08:10 · 728 阅读 · 0 评论 -
isMemberClass与isKindOfClass区别
看着这两个方法好像都一样,但是咱仔细想想一个是判断是不是成员,另一个是判断是不是类。看看苹果是怎么说的:isKindOfClass: 官方解释:Returns a Boolean value that indicates whether the receiver is an instance of given class or an instance of any class th原创 2016-07-16 10:04:35 · 1775 阅读 · 0 评论 -
NSString, char*, NSData类型之间的转换
1. NSString转化为UNICODE String:(NSString*)fname = @“Test”;char fnameStr[10];memcpy(fnameStr, [fname cStringUsingEncoding:NSUnicodeStringEncoding], 2*([fname length]));与strcpy相比,memcpy并不是遇到'\0'就结束,原创 2016-07-27 16:05:50 · 4179 阅读 · 0 评论 -
万能的NSData各种数据类型之间的转化
大家常用NSData吗?反正我是之前不用,后来项目中一部分人是写C++,所以后来我会用到NSData会数据进行转化1,NSData 与 NSString NSData --> NSString NSString *aString = [[NSString alloc] initWithData:adata encoding:NSUTF8StringEncoding];原创 2016-04-14 16:10:17 · 1348 阅读 · 0 评论 -
UISegmenControl 的字体颜色,选中色,边框颜色的修改
系统需要,之前修改了一下分段控制器,今天由用到了,又细细的看了一遍分段控制器,是这样的:我之前是这样写的://修改系统的UISegmentControl //修改字体大小 UIFont *font = PB_FONT_24; NSDictionary *attributes = [NSDictionary dictionaryWithObject:font for原创 2016-05-19 16:45:14 · 2825 阅读 · 0 评论 -
JSON字符串转化为字典
下边是NSJSONSerialization的几个核心方法,转化就靠下边这几个方法了/* Returns YES if the given object can be converted to JSON data, NO otherwise. The object must have the following properties: - Top level object is原创 2016-07-05 16:36:08 · 5132 阅读 · 0 评论 -
无题
进入随笔,技术上不会看文档梦,文档真的很清楚,各种讲解,思路上不清楚,先自己想,再讨论,没有什么,开发就这么回事原创 2016-01-27 18:58:08 · 292 阅读 · 0 评论 -
UIButton之ImageEdgeInsets,TitleEdgeInsets详解
项目中,我们在设置一个button的时候,会给他设置一些属性,其中就包括标题,图片等,可是我们在给一个button设置蚊子和标题的时候会发觉图片总是不自觉的在左边,文字在右边,这就奇怪了吧,一般来说,项目中都是文字居左,图片居右才对啊,于是我们刚开始可能会想是不是属性设置错了,我们不用SetImage,我们改用setBackgroundImage,好吧,不行,肯定不行啊,很明显后边的设置的是背景色原创 2016-06-06 14:49:03 · 1991 阅读 · 0 评论 -
中文,英文和数字的字体设置问题
调UI的时候遇到这么个奇葩的问题,是这样的,我一个label上显示有字,其中包含英文,中文和数字,我设置字体后很明显显示的不一样,因为是在cell中加的嘛,所以调试来调试去,做了很多工作,后来实在是感觉代码没问题,我就问了老大,老大看了代码后也确实没找到什么代码问题,这就奇葩了,我就又问了问UI,终于解决了,原来是这样的,中文,英文,数字都设置为同一种字体后,显示出来的效果是很明显的,中文会比英文原创 2016-05-20 17:46:55 · 2025 阅读 · 0 评论 -
业务知识
1.__bridge 什么鬼?__bridge: 当我们需要转换id和void类型的时候 通常会想到__bridge当ARC有效时(当然了,当前我们基本都是用的ARC),有三种转化方式:1.__bridge __bridge_retained __bridge_transferARC无效时 对应的代码id obj = [[NSObject alloc]init];voi原创 2016-02-24 09:23:32 · 519 阅读 · 0 评论 -
找回Button
封装了一个view,里边有button,但是我在使用这个封装的view的时候我想用这个button,但又不是全局的,好吧,使用tag值也是可以找到这个button的, UIButton *sender = (UIButton *)[self viewWithTag:MarketButtonTag];在这个界面想对button做什么操作都可以了。。。。原创 2016-03-10 20:16:14 · 316 阅读 · 0 评论 -
tag值重复定义
错误原创 2016-03-15 17:28:18 · 637 阅读 · 0 评论 -
圆角label
项目需求是一个圆角label,我设置了 Label.layer.cornerRadius = 3; 但是不行,后来一看文档,原来是UIVIew的 @property(nonatomic) BOOL clipsToBounds; // When YES, content and subviews are原创 2016-03-16 17:21:56 · 798 阅读 · 0 评论 -
nil,Nil,NULL,NSNull区别
这几个关键字,我们每个项目中都会用到其中的一个,两个或者更多,但是具体都是什么意思,他们之间都有什么区别呢,今天咱们一块探讨一下。一、nil我们给对象赋值时一般会使用object = nil,表示我想把这个对象释放掉;或者对象由于某种原因,经过多次release,于是对象引用计数器为0了,系统将这块内存释放掉,这个时候这个对象为nil,我称它为“空对象”。(注意:我这里原创 2016-04-18 17:22:36 · 374 阅读 · 0 评论 -
再说delegate
delegate, 我写的第一篇博客就是关于delegate,后来用的多了,自己发现了一个问题,这个问题其实很容易想清楚,还是自己之前对这个代理理解不透彻,是这样的,我后来写项目喜欢把一个个的模块封装成一个个的view,一个模块对应一个大View,一个大View中可能会由一个或者多个小的子view组成,而我在封装那些小的控件的时候我很多都会用到delegate来做,因为之前有一种惯性思维啊,就是原创 2016-04-21 10:15:03 · 339 阅读 · 0 评论 -
setter,getter,@property,@synthesize
以前都是直接用,我会用到@synthesize,@property,setter ,getter方法,基本自给都会用到,不过说真的,自己用的时候真的是朦朦胧胧,反正都是用,这点简单的基础知识,自己无需那么深究,今天有空了,我得好好深究一下,看了文档,也看了看别人写的技术博客,自己在这也是稍微总结下,是这样的,setter方法,顾名思义,就是设置方法,那么设置方法是干嘛的呢?其实就是我改变它,我可以原创 2016-04-29 13:28:54 · 513 阅读 · 0 评论 -
frame与bounds的区别
其实,我是怎么理解的呢,看,frame它是相对于父亲的坐标,至于怎么记,frame是f开头,father呢,也是f开头,所以说,frame就是相对于父亲的坐标,参照点是父坐标,而bounds呢?既然frame是相对于父亲,那么bounds 就是相对于自己的了,看下边的讲解更绘声绘色点:一、首先列一下公认的资料:先看到下面的代码你肯定就明白了一些:-(CGRect)frame{原创 2016-05-03 10:10:24 · 496 阅读 · 0 评论