Objective-C
文章平均质量分 51
风羿wy
微信: ryan_wyn
展开
-
[Objective-C]内存泄漏是新手必然要经历的痛,NSMutableArray的正确使用
Objective-C程序开发中的内存泄漏问题是新手非常头痛的事情,可能是用C#这类自动垃圾释放的语言太习惯了,用xcode中的profile工具查了一下我写的小程序,内存泄漏了一大堆,经过一阵子排查,在NSMutableArray中添加对象后不正确维护对象的引用计数是一个主要原转载 2011-09-27 15:55:43 · 5453 阅读 · 0 评论 -
[iOS]使用NSProxy实现消息转发机制,模拟多重继承
Objective-C不支持多重继承,但是我们可以使用NSProxy的消息转发机制,来转发可由其它类的对象处理的任务,达成同样的目的。Xcode的Documentation中有示例(搜索ForwardInvocation,在Sample Code类别中),如下:/* File: main.m Abstract: This原创 2012-05-09 09:45:52 · 7517 阅读 · 0 评论 -
[iOS] performSelector:withObject:afterDelay:调用没有作用的问题及解决方法
这个问题找了将近一天,baidu、google了很久,竟然没有人遇到同样问题?performSelector:withObject:afterDelay:和[NSTimer timerWithTimeInterval:invocation:repeats:]都存在此问题:调用后,延迟后(延迟0也一样)没有进入指定的@selecter()中。反复验证发现,这种现象出现在子线程中,主线原创 2012-05-15 16:08:48 · 13108 阅读 · 3 评论 -
NSRunloop 的用法
今天突然才之间才意识到NSTimer这样的运行方式,是在多线程中实现的循环还是在主线程中去实现的呢。当然不可能是在主线程中的while那么简单,那样什么都干不了,简单看了下NSTimer是以同步方式运行的。时间到了,消息发出后,ontimer的函数是在主线程上调用的。我们会经常看到这样的代码:- (IBAction)start:(id)sender {转载 2012-07-08 13:35:41 · 2153 阅读 · 0 评论 -
iOS通过Quartz画矩形、文字、线
首先,获取上下文CGContextRef context =UIGraphicsGetCurrentContext();画无框矩形//设置矩形填充颜色:红色 CGContextSetRGBFillColor(context, 1.0, 0.0, 0.0, 1.0); //填充矩形 CGContextFillRect(context, rec转载 2012-07-08 13:42:48 · 12580 阅读 · 1 评论 -
当程序崩溃的时候怎么办 part-1
有这样一种情形:当我们正在快乐的致力于我们的app时,并且什么看都是无比顺利,但是突然,坑爹啊,它崩溃了。(悲伤地音乐响起)我们需要做的第一件事就是:不要惊慌。修复崩溃不是很困难的。假如你崩溃了,并且胡乱的改些东西,而且还在不停的念着咒语希望bug神奇的自动消失,你大多数情况下都会使情况更麻烦。相反的,你需要知道一些系统的方法,并且学习怎么找到崩溃和他的原因。转载 2012-08-22 11:01:38 · 2506 阅读 · 0 评论 -
当程序崩溃的时候怎么办 Part-2
原文地址:http://www.raywenderlich.com/10209/my-app-crashed-now-what-part-2欢迎回到当程序崩溃的时候怎么办 教程!在这个教程的第一部分,我们介绍了SIGABRT和EXC_BAD_ACCESS错误,并且举例说明了一些使用xcode调试器(Xcode debugger)和异常断点(Exception Breakpoints转载 2012-08-22 11:05:36 · 9309 阅读 · 0 评论 -
[iOS]Xcode4/iOS5调试UncaughtException崩溃First throw call stack不打印方法名的解决方案
最近连接iOS5.0.1真机调试的的时候,发现UncaughtException导致crash之后*** First throw call stack:后面没有打印可读的调用堆栈,以前崩溃之后会显示详细的调用的方法名等信息,但是现在都是一堆内存地址0x…..0x…..。我起初也不知道怎么回事,之前似乎也没碰到过。谷歌了一下,看到了一篇文章(http://stackoverflow.com/转载 2012-08-22 11:07:20 · 7200 阅读 · 0 评论 -
[Objective-C]关联(objc_setAssociatedObject、objc_getAssociatedObject、objc_removeAssociatedObjects)
关联 关联是指把两个对象相互关联起来,使得其中的一个对象作为另外一个对象的一部分。 关联特性只有在Mac OS X V10.6以及以后的版本上才是可用的。在类的定义之外为类增加额外的存储空间 使用关联,我们可以不用修改类的定义而为其对象增加存储空间。这在我们无法访问到类的源码的时候或者是考虑到二进制兼容性的时候是非常有用。 关联是基于关键字的,因转载 2013-07-11 11:54:34 · 78920 阅读 · 6 评论 -
[Objective-C]__bridge,__bridge_retained和__bridge_transfer的意思,区别与使用
使用ARC能帮我们减轻不少内存管理方面的负担,尤其是对用惯了Java的程序员来说。但是像我这种Java基础本身就不牢固,做了两年的iOS已经习惯手动管理内存的半吊子,使用ARC还是经常碰壁。最近碰到了CFObject和NSObject转换的问题,由于ARC不能管理Core Foundation Object的生命周期,所以在Core Foundation和ARC之间,我们需要使用到__br转载 2013-07-11 11:57:17 · 10819 阅读 · 0 评论 -
手把手教你ARC——iOS/Mac开发ARC入门和使用
本文部分实例取自iOS 5 Toturail一书中关于ARC的教程和公开内容,仅用于技术交流和讨论。请不要将本文的部分或全部内容用于商用,谢谢合作。欢迎转载本文,但是转载请注明本文出处:http://www.onevcat.com/2012/06/arc-hand-by-hand/本文适合人群:对iOS开发有一定基础,熟悉iOS开发中内存管理的Reference Counting机转载 2014-07-15 19:38:34 · 1300 阅读 · 0 评论 -
iOS7中的多任务II
【推送唤醒(Remote Notifications)】 在iOS6和之前,推送的类型是很单一的,无非就是显示标题内容,指定声音等。用户通过解锁进入你的应用后,appDelegate中通过推送打开应用的回调将被调用,然后你再获取数据,进行显示。这和没有后台获取时的打开应用后再获取数据刷新的问题是一样的。 在iOS7中这个行为发生了一些改变,我们有机会使设备在接收到远端推送后让系统唤醒设转载 2017-04-29 20:04:53 · 589 阅读 · 0 评论 -
iOS7实现后台拉取
原文链接:http://esoftmobile.com/2013/06/23/ios7%E7%A8%8B%E5%BA%8F%E5%90%8E%E5%8F%B0%E8%BF%90%E8%A1%8C/介绍这次iOS7对程序后台运行进行了加强,但是仅仅是加强而已,要想像Android程序那样自由当然就别想了,苹果这么做主要还是出于电池使用时间考虑,但是这次的加强对大部分程序基本够用。转载 2017-04-29 20:27:52 · 629 阅读 · 0 评论 -
iOS 框架模式(简述 MVC,MVP,MVVM 和 VIPER)
写在前面的话最近看了一篇国外大牛写的关于 iOS 框架模式的文章,内容涉及目前 iOS 端诸多主流的框架模式,个人感觉文章写的很不错,收获匪浅,希望能够通过翻译原文的方式更好的体会一下,也分享给更多的人参考。原文地址在这里,浏览原文可能需要科学上网。正文原文配图,感觉不错在 iOS 中使用 MVC 感觉怪怪的?想要投奔 MVVM 但是又感到迟疑?听说过 VIPER,转载 2017-04-30 19:20:53 · 703 阅读 · 0 评论 -
使用VIPER构建iOS应用
转自Di Wu's blog,原文:Architecting iOS Apps with VIPER 建筑领域流行这样一句话,“我们虽然在营造建筑,但建筑也会重新塑造我们”。正如所有开发者最终领悟到的,这句话同样适用于构建软件。 编写代码中至关重要的是,需要使每一部分容易被识别,赋有一个特定而明显的目的,并与其他部分在逻辑关系中完美契合。这就是我们所说的软件架构。好的架构不仅让转载 2017-04-30 23:16:04 · 868 阅读 · 0 评论 -
iOS开发网络篇—数据缓存
一、关于同一个URL的多次请求 有时候,对同一个URL请求多次,返回的数据可能都是一样的,比如服务器上的某张图片,无论下载多少次,返回的数据都是一样的。 上面的情况会造成以下问题(1)用户流量的浪费(2)程序响应速度不够快解决上面的问题,一般考虑对数据进行缓存。 二、缓存 为了提高程序的响应速度,可以考虑使用缓存(内存缓存\硬盘缓存)转载 2017-04-22 15:40:19 · 512 阅读 · 0 评论 -
ReactiveCocoa 和 MVVM 入门
翻译自ReactiveCocoa and MVVM, an Introduction. MVC任何一个正经开发过一阵子软件的人都熟悉MVC. 它意思是Model View Controller, 是一个在复杂应用设计中组织代码的公认模式. 它也被证实在 iOS 开发中有着第二种含义:Massive View Controller(重量级视图控制器). 它让许多程序员绞转载 2017-04-24 17:31:27 · 808 阅读 · 0 评论 -
[iOS]使用NSProxy实现代理模式
// MyProxy.h#import@interface MyProxy :NSProxy { NSObject *object;}- (id)transformToObject:(NSObject *)anObject;@end// MyProxy.m#import"MyProxy.h"@impl原创 2012-05-09 09:29:03 · 13013 阅读 · 3 评论 -
[iOS] performSelectorOnMainThread支持多个参数
iOS 的 NSObject对象提供了一种在不同线程中执行其方法的机制。最常见的是需要在主线程即UI线程中去执行一些方法performSelectOnMainThread:withObject:waitUntilDone:但是这个默认的方法只支持一个参数。performSelector:withObject:withObject:这个不是在主程线中运行的…只能依靠cat转载 2012-04-11 13:11:41 · 8019 阅读 · 0 评论 -
从 C++ 到Objective-C
从 C++ 到 Objective-C(1):前言作者: DevBean 日期: 2011 年 03 月 18 日Objective-C 可以算作 Apple 平台上“唯一的”开发语言。很多 Objective-C 的教程往往直接从 Objective-C 开始讲起。转载 2011-10-15 19:57:32 · 5660 阅读 · 2 评论 -
Xcode and #pragma mark
I’ve started using #pragma mar directives in my code to help with organization as my implementation files grow. #pragma mar is simple to use, for example, insert the following to call out initializa转载 2011-11-01 09:42:35 · 2669 阅读 · 0 评论 -
Objective-C的Block(闭包),递归与泛型
Apple在C,Objective-C和C++中扩充了Block这种文法的,并且在GCC4.2中进行了支持。现在我们可以在Mac 10.6和iOS 4中使用。如果是Mac 10.6 或 iOS 4.0 之前的平台,据说可以用http://code.google.com/p/plblocks/这个项目来支持Block语法。Apple在 Snow Leopard中所用到的Grand Central转载 2011-11-22 09:36:53 · 4163 阅读 · 0 评论 -
cocoa线程同步synchronized
synchronized关键字 代表这个方法加锁,相当于不管哪一个线程A每次运行到这个方法时,都要检查有没有其它正在用这个方法的线程B(或者C D等),有的话要等正在使用这个方法的线程B(或者C D)运行完这个方法后再运行此线程A,没有的话,直接运行 它包括两种用法:synchronized 方法和 synchronized 块。1. synchronized 方法:转载 2011-11-01 11:27:59 · 1368 阅读 · 0 评论 -
关于NSString的retainCount的各种结果原因
1. 字符串常量NSString *s = @"test";NSLog(@"s:%d",[s retainCount]); // -1或2147483647(即UINT_MAX ( Maximum value an `unsigned int'))因为"test"为字符串常量,系统不会收回,也不会对其作引用计数,即使我们对s如何retain或release。 2. string原创 2011-11-03 15:59:56 · 7812 阅读 · 4 评论 -
release 与 retainCount
在XCode中加入如下代码:与 retainCount" alt="release 与 retainCount" src="http://s9.sinaimg.cn/middle/7e3132caga9736d788758&690" width="238" height="94">理论上说,第一句话alloc了一个label,其保留计数器值为1,第二句话对保留计数器的值不产转载 2011-11-03 15:43:03 · 1312 阅读 · 0 评论 -
Objective-C编译错误:expected '=', ',', ';', 'asm' or '__attribute__' before ***
在Objective-C(.m)中使用C++(.cpp)或Objective-C++(.mm)时,编译过程出现如下错误:expected '=', ',', ';', 'asm' or '__attribute__' before ***原因是C++或Objective-C++代码被Objective-C代码调用,或间接调用了(#import了#import其它.cpp或.mm文件的.原创 2011-11-04 18:09:00 · 3487 阅读 · 0 评论 -
Objective-C的反射
转自:http://blog.sina.com.cn/s/blog_6d723b1f0100q6m6.html 我第一次接触Java的时候就觉得整个反射包都很新颖,它使得Java和解释型的脚本语言更接近了,与此同时也拉开了和主流的C和C++的距离。 在运行时可以窥视到一个对象的类元数据真的很不可思议,尽管这些可能不会在日常应用编程中经常使用到。从Java转到Objective-C转载 2011-11-09 11:23:11 · 1039 阅读 · 0 评论 -
[Objective-C]向nil发送消息
向nil发送消息 在Objective-C中向nil发送消息是完全有效的——只是在运行时不会有任何作用。Cocoa中的几种模式就利用到了这一点。发向nil的消息的返回值也可以是有效的: • 如果一个方法返回值是一个对象,那么发送给nil的消息将返回0(nil)。例如:Person * motherInlaw = [ aPerson spouse] mother]; 如果spou转载 2012-02-22 13:53:36 · 5307 阅读 · 0 评论 -
[Objective-C]isKindOfClass和isMemberOfClass的区别
isKindOfClass: Returns a Boolean value that indicates whether the receiver is an instance of given class or an instance of any class that inherits from that class.isMemberOfClass: Returns a Boolea原创 2012-02-29 15:18:39 · 11707 阅读 · 0 评论 -
[iOS] CFRunLoop示例总结
首先看两个runloop的示例第一个:#include static void _perform(void *info __unused) { printf("hello\n"); } static void _timer(CFRunLoopTimerRef timer __unused, vo转载 2012-04-03 10:52:44 · 7883 阅读 · 0 评论 -
[iOS]后台工作队列:NSOperationQueue、NSOperation、NSInvocationOperation
NSOperationQueue1,operationQueue 里边应该可以同时添加多个operation吧?是的,本来operationQueue的目的就是多线程管理,那多线程,可不只是一个线程。而且我们可以设置这个队列每次被处理的“操作”数量 NSOperationQueue *aQ = [[NSOperationQueue alloc] init];转载 2012-04-03 09:33:35 · 8099 阅读 · 2 评论 -
[Objective-C]SEL类型、@selector选择器
1 id cattle[3]; 2 SEL say; 3 SEL skin; 其中id cattle[3]定义了一个数组用于存储Cattle或者Bull对象。这一行代码估计大家都很熟悉,笔者就不赘述了。像这样的传统的数组并不能完全满足我们的需求,当我们需要做诸如追加,删除等操作的时候,会很不方便。在随后的章节里面笔者将要向大家介绍传统数组的替代解决方案N转载 2012-03-19 14:25:24 · 1785 阅读 · 0 评论 -
[Objective-C]Class类型、class方法
Class类型 到目前为止,我们已经知道了对应于方法的SEL数据类型,和SEL同样在Objective-C里面我们不仅仅可以使用对应于方法的SEL,对于类在Objective-C也为我们准备了类似的机制,Class类型。当一个类被正确的编译过后,在这个编译成功的类里面,存在一个变量用于保存这个类的信息。我们可以通过一个普通的字符串取得 这个Class,也可以通过我们生成的对象取得这个C转载 2012-03-19 14:27:42 · 10263 阅读 · 0 评论 -
[iOS] NSInvocation简单使用
在 iOS中可以直接调用 某个对象的消息 方式有2中一种是performSelector:withObject:再一种就是NSInvocation第一种方式比较简单,能完成简单的调用。但是对于>2个的参数或者有返回值的处理,那就需要做些额外工作才能搞定。那么在这种情况下,我们就可以使用NSInvocation来进行这些相对复杂的操作NSInvocation可以处理参数、返回值。会j转载 2012-04-11 13:16:40 · 4478 阅读 · 0 评论 -
ReactiveCocoa 和 MVVM 入门
翻译自ReactiveCocoa and MVVM, an Introduction. MVC任何一个正经开发过一阵子软件的人都熟悉MVC. 它意思是Model View Controller, 是一个在复杂应用设计中组织代码的公认模式. 它也被证实在 iOS 开发中有着第二种含义:Massive View Controller(重量级视图控制器). 它让许多程序员绞转载 2017-04-24 17:32:43 · 1028 阅读 · 0 评论