IOS开发相关
文章平均质量分 71
小T是我
只想在一条道上越走越远~
展开
-
做对这道题,说明你懂block了
直接上题:__block int i = 0; NSLog(@"初始:%p-%d",&i,i); void (^myBlock)(void) = ^{ i ++; NSLog(@"Block内部:%p-%d",&i,i); }; i++; NSLog(@"Block外面:%p-%d",&i,i);原创 2016-11-22 20:09:46 · 587 阅读 · 1 评论 -
源码分析iOS中的super
首先来看一个很老的题目:如下:@interface MyObject : NSObject@end@implementation MyObject- (id)init { self = [super init]; if (self) { NSLog(@"%@", NSStringFromClass([self class])); ...原创 2016-11-21 20:21:02 · 802 阅读 · 0 评论 -
Understanding and Analyzing Application Crash Reports
原文地址:https://developer.apple.com/library/content/technotes/tn2151/_index.html#//apple_ref/doc/uid/DTS40008184-CH1-INTRODUCTIONWhen an application crashes, a crash report is created which is ve翻译 2016-12-01 13:18:07 · 1279 阅读 · 0 评论 -
《Effective Objective-C 2.0》读书笔记---第一章
第一条:了解Objective-C语言的起源Objective-C语言使用“消息结构”(messaging structure)而非“函数调用”(function calling).Objective-C语言由Smalltalk演化而来。使用消息结构的语言,其运行时所应执行的代码由运行环境来决定;而使用函数调用的语言,则由编译器决定。Objective-C的重要原创 2016-11-18 15:20:43 · 1167 阅读 · 0 评论 -
理解__unsafe_unretained
概述:这里假设你已经熟悉__strong和__weak,如果不懂就不用继续往下看了。__unsafe_unretained:和__weak 一样,唯一的区别便是,对象即使被销毁,指针也不会自动置空, 此时指针指向的是一个无用的野地址。如果使用此指针,程序会抛出 BAD_ACCESS 的异常。 举例分析:下面我们通过两个简单的例子来分析一下,以下如果未特别说明,都是在AR原创 2016-11-13 14:58:18 · 6236 阅读 · 4 评论 -
关于__autoreleasing,你真的懂了吗?
上一篇文章介绍了__unsafe_unretained这里我们要借助__unsafe_unretained来理解__autoreleasing,童鞋们肯定会说__autoreleasing,这么简单,就是将指向的对象延迟销毁,这里我要将我研究__autoreleasing的过程中遇到的坑一一分析出来,如果你也遇到过,那我们可以一起讨论一下,或者你觉得我哪里分析得不对,请提出来,因为我也在学习中原创 2016-11-14 19:55:24 · 6439 阅读 · 4 评论 -
理解自动释放池
首先来段官方文档:ImportantIf you use Automatic Reference Counting (ARC), you cannot use autorelease pools directly. Instead, you use @autoreleasepool blocks. For example, in place of:Code Listing原创 2016-11-08 19:49:34 · 1415 阅读 · 0 评论 -
iOS开发中的警告(Objective-C和Swift)
在Xcode中,Build Settings选项里为我们提供了很多警告开关,对于每一个开关,在右侧的Quick Help面板里都有详细说明。如下图所示:在编译选项中加入合适的flag能够打开或者关闭警告:在Build Setting中的Other C Flags里添加形似-W...的编译标识。你可以在其中填写任意多的-W...以开关某些警告,比如,填写为-Wall -Wno-u原创 2016-09-23 15:32:13 · 1212 阅读 · 0 评论 -
采用Tagged Pointer的字符串
本文由CocoaChina译者@ALEX吴浩文翻译作者:Mike Ash 原文:Friday Q&A 2015-07-31: Tagged Pointer Strings 翻译原文:采用Tagged Pointer的字符串Tagged Pointer是一个能够提升性能、节省内存的有趣的技术。在OS X 10.10中,NSString就采用了这项技术转载 2016-05-10 15:52:40 · 1045 阅读 · 0 评论 -
block探究
前面提出了一个关于Block的问题,下面我们通过源码先来了解一下block,再来详细分析这个问题======================以下如不特别说明,均是ARC运行环境======================首先我们把c语言中的变量分成以下几种:自动变量函数参数静态局部变量静态全局变量全局变量原创 2016-11-24 16:20:31 · 744 阅读 · 0 评论 -
理解__bridge,__bridge_transfer和__bridge_retained
=================以下未经说明,都是在ARC环境下==============在Cocoa应用程序中,我们常常会使用到Core Foundation-style objects,例如CFArrayRef 或者 CFMutableDictionaryRef等等编译器不会自动管理Core Foundation-style objects的生命周期,你必须根据Core Fou原创 2016-12-07 17:27:19 · 3322 阅读 · 0 评论 -
iOS彻底弄懂循环引用
@class MyObjectB;@interface MyObjectA : NSObject@property (nonatomic, strong) MyObjectB *objectB;@end@implementation MyObjectA- (void)dealloc{ NSLog(@"%s",__func__);}@end@class MyO原创 2016-12-28 15:11:30 · 1220 阅读 · 0 评论 -
无处不在的内存泄漏-苹果BUG?
即使你对自己的技术功底有再多的自信,都请养成使用Instruments工具排查内存泄漏的良好习惯,即使Instruments再牛逼,你也还要养成看接口文档的良好习惯,因为你防谁也防不了苹果。。。下面就是使用Instruments排查不出来的内存泄漏直接上代码CABasicAnimation *animation = [CABasicAnimation a原创 2016-12-27 17:09:48 · 2185 阅读 · 0 评论 -
《Effective Objective-C 2.0》读书笔记---第七章
前言:虽说不使用系统框架也能编写OC代码,但几乎没人这么做,即便是NSObject这个标准的根类,也属于Foundation框架,而非语言本身。若不使用Foundation,就必须自己编写根类,同时还要自己来写collection、事件循环、以及其他会用到的类。第47条:熟悉系统框架用户升级操作系统后,你所开发的应用程序也可以使用最新版的原创 2016-12-23 19:54:00 · 954 阅读 · 0 评论 -
《Effective Objective-C 2.0》读书笔记---第五章
前言:ARC几乎把所有内存管理事宜都交由编译器来决定,开发者只需专注于业务逻辑。第29条:理解引用计数引用计数机制通过可以递增递减的计数器来管理内存。对象创建好之后,其保留计数至少为1.若保留计数为正,则对象继续存活。当保留计数降为0时,对象就被销毁了。在对象声明周期中,其余对象通过引用来保留或释放此对象。保留与释放操原创 2016-12-23 14:51:33 · 666 阅读 · 0 评论 -
《Effective Objective-C 2.0》读书笔记---第四章
前言:OC不支持多重继承,因而我们把某个类应该实现的一系列方法定义在协议里面,协议除了实现委托模式,还能很好地描述接口。利用“分类”(Category),我们无需继承子类即可直接为当前类添加方法。第23条:通过委托与数据源协议进行对象间通信如果要向外界公布此类实现了某协议,那么就在接口中声明,而如果这个协议是个委托协议原创 2016-12-21 19:49:46 · 630 阅读 · 0 评论 -
《Effective Objective-C 2.0》读书笔记---第二章
前言:当应用程序运行起来以后,为其提供相关支持的代码叫做“Objective-C运行期环境”(Objective-C runtime),它提供了一些使得对象之间能够传递消息的重要函数,并且包含创建类实例所用的全部逻辑。第六条:理解“属性”这一概念Java 或 C++ 中,可以使用publish,private等关键字来定义实例变量的作用域,OC也可以原创 2016-12-19 17:52:53 · 933 阅读 · 0 评论 -
《Effective Objective-C 2.0》读书笔记---第三章
第15条:用前缀避免命名空间冲突OC没有其他语言那种内置的命名空间(namespace)机制,鉴于此,我们在起名时要设法避免潜在的命名冲突,否则很容易就重名了。避免重名的唯一办法就是变相实现命名空间:为所有名称都加上适当的前缀。使用Cocoa创建应用程序时要注意,Apple宣称其保留使用所有“两个字母前缀”(two-letter pref原创 2016-12-21 14:50:09 · 834 阅读 · 0 评论 -
史上比较用心的纯代码实现AutoLayout
原文地址:http://www.cocoachina.com/ios/20160616/16732.html概述使用 Objective-C 纯代码编写 AutoLayout,看 AutoLayout 的字面理解就是自动布局,听起来好像蛮屌的样子。说白了就是适配:适应、兼容各种不同的情况,包括不同版本的操作系统的适配(系统适配)和不同屏幕尺寸的适配(屏幕适配)。转载 2016-06-21 12:19:14 · 661 阅读 · 0 评论 -
iOS自定义相机界面(实现自定义裁剪框)
效果图:实现原理:黑色阴影是通过上,左,下,右四块阴影拼接起来的;截图是通过:首先我们已经知道裁剪框在所得图片上面的frame;1.对原始图片压缩;2.压缩后的原始图片宽度和当前屏幕宽度的比例scale;3.将裁剪框的frame按照这个比例scale放大或者缩小得到scaleFrame;4.scaleFrame就是我们在压缩原始图片上面要裁减的rec原创 2016-03-07 18:33:24 · 9671 阅读 · 0 评论 -
iOS图片裁剪
UIImage *image = [UIImage imageNamed:@"imageDemo"]; CGRect rect = CGRectMake(0, 0, 100, 100);//要裁减的区域 CGImageRef cgimg = CGImageCreateWithImageInRect([image CGImage], rect); image =原创 2016-03-07 16:56:32 · 741 阅读 · 0 评论 -
UIViewContentMode详解
UIView有个UIViewContentMode类型的属性contentMode,可以通过它来修改视图的内容显示模式。typedef NS_ENUM(NSInteger, UIViewContentMode) { UIViewContentModeScaleToFill, UIViewContentModeScaleAspectFit, // contents原创 2015-04-24 15:56:23 · 3234 阅读 · 0 评论 -
iOS申请持续的后台时间
由于苹果的后台机制,当我们按下home键的时候,所有线程包括主线程的任务都会被挂起,一些资源比如socket也会被系统回收,会导致很多问题,比如一个很重要的资源中断下载,或者定时器方法被暂停等等。苹果在4.0以后提供了一种申请后台时间的机制:- (UIBackgroundTaskIdentifier)beginBackgroundTaskWithExpirationHandle原创 2015-04-15 11:55:45 · 2974 阅读 · 0 评论 -
iOS后台如何保持socket长连接和数据传输
工程中使用tcp长连接来和服务端进行数据传输,在IOS平台上,由于苹果的后台机制,会有以下问题:当程序退到后台的时候,所有线程被挂起,系统会回收所有的socket资源,那么socket连接就会被关闭,因此无法再进行数据的传输:解决方法:通过设置以下属性可以保持socket连接和数据的继续传输1.需要在Info.plist文件中添加UIBackgroundModes中的VOI原创 2014-08-16 20:54:15 · 6804 阅读 · 0 评论 -
iOS线程同步和锁实例详解及总结
应用程序里面多个线程的存在引发了多个执行线程安全访问资源的潜在问题。两个线程同时修改同一资源有可能以意想不到的方式互相干扰。iOS 提供了你可以使用的多个同步工具,从提供互斥访问你程序的有序的事件的工具等。以下个部分介绍了这些工具和如何在代码中使用他们来影响安全的访问程序的资源。我们通过同一个例子来说明这些锁,当两个线程同时操作一个可变数组时,一个线程添加数据,一个线程删除数据,类似一个生产消...原创 2015-04-14 10:45:17 · 992 阅读 · 0 评论 -
UICollectionView使用小结
UICollectionViewFlowLayout 类是一个具体的布局对象,它将一个个部件组织成一个可分组的(每个分组都有可选的页眉和页脚视图)网格;这些部件在集合视图中从一行流向下一行或者一列流向下一列(根据滚动方向),每个单元都可以是相同的尺寸或者不同的尺寸;一个流布局是通过集合视图的委托来决定每个分组的部件,头部以及底部的尺寸大小的,这个委托对象必须执行UICollection原创 2015-04-13 11:44:57 · 4054 阅读 · 0 评论 -
NSNotificationQueue多线程
首先上代码:- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. UIButton *button = [UIButton buttonWithType:UIButtonTyp原创 2015-03-18 11:38:24 · 3038 阅读 · 0 评论 -
block小结
根据Block在内存中的位置分为三种类型NSGlobalBlock,NSStackBlock, NSMallocBlockNSGlobalBlock:我们可以通过是否引用外部变量识别,未引用外部变量即为NSGlobalBlock,可以当做函数使用。NSStackBlock:block的isa指向的不是object_class,而是_NSConcreteStackBloc原创 2015-03-30 16:50:23 · 760 阅读 · 0 评论 -
NSNotificationCenter的同步和异步
首先上代码:- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. UIButton *button = [UIButton buttonWithType:UIButtonTyp原创 2015-03-17 18:49:17 · 5554 阅读 · 1 评论 -
iOS异常处理并发送崩溃报告到服务器:NSSetUncaughtExceptionHandler及signal
在程序中常常会遇到崩溃,我们可以通过以下两种途径来捕获崩溃信息发送到我们的服务器;这两种途径会捕获不同的崩溃信号;途径一:void NSSetUncaughtExceptionHandler(NSUncaughtExceptionHandler *);DiscussionSets the top-level error-handling function where you can ...原创 2015-03-26 15:59:04 · 1169 阅读 · 0 评论 -
iOS蓝牙4.0开发(一)与外设通讯
蓝牙协议本身经历了从1.0到4.0的升级演变, 最新的4.0以其低功耗著称,所以一般也叫BLE(Bluetoothlow energy)。iOS 有两个框架支持蓝牙与外设连接。一个是 ExternalAccessory。从ios3.0就开始支持,也是在iphone4s出来之前用的比较多的一种模式,但是它有个不好的地方,External Accessory需要拿到苹果公司的MFI认证。原创 2015-05-11 17:20:19 · 2081 阅读 · 0 评论 -
iOS APP互相调用
调用者:只需要执行以下调用方法,以“://”为分隔符,左边就是要调用APP的地址,右边是你要传给这个APP的参数。 NSURL *url = [NSURL URLWithString:@"Ceshi001://aaaaaaa"]; [[UIApplication sharedApplication] openURL:url];被调用者:info.plist文件原创 2015-05-26 15:30:03 · 963 阅读 · 0 评论 -
iOS和JS之间的交互
iOS调用JS的方法: //js方法名+参数 NSString* jsCode = [NSString stringWithFormat:@"initCarLicenseInfo('%@')",object]; //调用html页面的js方法 [webView stringByEvaluatingJavaScriptFromString:jsCode];原创 2016-03-07 15:26:14 · 950 阅读 · 0 评论 -
获取UITableView指定行在指定视图中的位置
开发中我们常常需要获取表视图的特定某一行在特定的视图中的位置,例如做用户引导页面的时候,我们需要指向某一行,如果写死的话,表视图的行高不固定或者表头行高不固定,这样就会出错,解决方法如下:代码如下: NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:1]; CGRect rectInTableV原创 2016-02-17 15:01:13 · 1438 阅读 · 0 评论 -
UIImagePickerController使用小结
开发中上传头像的时候会用到UIImagePickerController,无论是从照片库选择照片还是拍照都使用这个类;创建代码如下: UIImagePickerController *picker = [[UIImagePickerController alloc] init]; [picker setSourceType:UIImagePickerControllerSourc原创 2016-02-17 14:37:48 · 714 阅读 · 0 评论 -
iOS深复制和浅复制
浅复制示例代码: NSMutableArray *mArray = [NSMutableArray arrayWithObjects: [NSMutableString stringWithString: @"origionA"], [NSMutableString s原创 2015-04-23 16:01:45 · 748 阅读 · 0 评论 -
使用苹果原生视频播放器MPMoviePlayerController播放来自优酷等网页的视频
没有自己的流媒体服务器,又想在app中用原生视频播放器MPMoviePlayerController将视频插入到界面,在界面可以直接播放,或者全屏播放,可以通过以下方法实现先创建原生播放器 _moviePlayer = [[MPMoviePlayerController alloc] init]; _moviePlayer.controlStyle = MPMovieContro原创 2015-08-06 11:29:09 · 4429 阅读 · 0 评论 -
关于UIScrollView的alwaysBounceVertical属性
在iOS开发中,经常会用到UIScrollView控件,比如UIScrollView,UICollectionView,UITableView等,这里有三个属性:@property(nonatomic) BOOL bounces; // default YES. if YES, bounces past edge of co原创 2015-08-24 11:56:12 · 14779 阅读 · 0 评论 -
iOS蓝牙4.0开发(二)iOS设备之间的通讯
上一节通过与外设之间文件传输讲解了中心角色(central),这一节通过iOS设备间的数据传输来详细讲解外设角色(peripheral)实现细节首先在我自己类的头文件中要包含CoreBluetooth的头文件,并继承协议CBPeripheralManagerDelegate1.创建我们的外设角色_peripheralManager = [[CBPeripheralManager原创 2015-05-14 14:11:11 · 1599 阅读 · 0 评论 -
iOS通过ttf文件加载字体
首先,info.plist文件中添加Fonts provided by application属性,将ttf或者otf文件名加入到列表中,并将ttf或者otf文件添加到工程中;其次,通过以下方法可以查看系统所有支持的字体名字,包括你刚才导入的。 NSLog(@"Font names = %@", [UIFont familyNames]);最后,可以通过以下方法使用原创 2015-05-26 14:37:05 · 1767 阅读 · 0 评论