
Objective-C
一秀
这个作者很懒,什么都没留下…
展开
-
instancetype和id区别
一、什么是instancetypeinstancetype是clang 3.5开始,clang提供的一个关键字,表示某个方法返回的未知类型的Objective-C对象。我们都知道未知类型的的对象可以用id关键字表示,那为什么还会再有一个instancetype呢?二、关联返回类型(related result types)根据Cocoa的命名规则,满足下述规则的方法:1、类方法中,以alloc或转载 2014-08-02 08:20:12 · 596 阅读 · 0 评论 -
[tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]IOS6.0以上
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];和UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath转载 2014-05-30 10:59:16 · 1576 阅读 · 1 评论 -
Retain Cycle
在iOS4.0推出了Blocks這個語言特性後到現在iOS都已經出到5.0了所以我想Blocks應該可以被廣泛應用了但現在iOS環境是從MRC(Manual Reference Counting) 走到ARC (Automatic Reference Counting)在Reference Counting的環境中Runtime是無法自動解除Retain cycle的而Bloc转载 2014-06-13 09:35:10 · 630 阅读 · 0 评论 -
UIResponder详解(响应者)
UIResponder Class ReferenceManaging the Responder Chain[plain] view plaincopy1.- (UIResponder *)nextResponder 返回接收者的下一个相应,如果没有就返回nilUIResponder类不自动存储和设置下一个响应者,而是默认转载 2014-07-22 08:50:22 · 654 阅读 · 0 评论 -
UIResponder详解(响应者)
UIResponder Class ReferenceManaging the Responder Chain[plain] view plaincopy1.- (UIResponder *)nextResponder 返回接收者的下一个相应,如果没有就返回nilUIResponder类不自动存储和设置下一个响应者,而是默认转载 2014-07-22 08:55:20 · 913 阅读 · 0 评论 -
UIPasteboard 粘贴板,复制粘贴UILabel,UIImageView的数据
有时候我们可能需要复制UILabel上的文本,或者UIImageView的图片,而UILabel和UIImageView默认是不响应Touch事件的,也无法复制,那么我们就需要自己实现一个可复制的UILabel。新添加一个类继承自UILabel:@interface UICopyLabel : UILabel @end #import "转载 2014-06-09 10:41:11 · 822 阅读 · 0 评论 -
Choose a destination with a supported architecture in order to run on this device.
通常出现这个问题的原因是以前的老项目在新版本的xcode中打开时会出现为这个问题。郁闷了一段时间, 在网上也没有找到合适的解决方案, 后来发现其实是这个提示过于误导。大部分人看到这个提示,立马会想到可能是architecture设置成不对,但不管怎么去修改,这个错误还是会存在。 其实只要把编译器改成现在的LLVM即可。 修改位置Project->Build Settin转载 2014-06-09 17:36:58 · 462 阅读 · 0 评论 -
Objective-C 常用代码记要
NSImage与NSData之间转换NSData *imageData = [NSDatadataWithContentsOfFile: imagePath]; UIImage *aimage = [UIImage imageWithData: imageData]; //UIImage-> NSData NSData *imageData =原创 2013-07-22 13:19:29 · 749 阅读 · 0 评论 -
UIView(包括子类)初始化,被添加时执行的几个动机
根据你需要执行的动作, 这里有几个方法:-(id)initWithFrame:(CGRect)frame - UIView的指定初始化方法; 总是发送给UIView去初始化, 除非是从一个nib文件中加载的;-(id)initWithCoder:(NSCoder *)coder - 从nib文件中加载的时候发送此消息给UIView;-(void)awakeFromNib转载 2014-06-09 17:07:38 · 682 阅读 · 0 评论 -
iOS 键盘的编程所需技巧
首先,你得监听键盘的事件,最基本的两个事件:UIKeyboardWillShowNotificationUIKeyboardWillHideNotificationUIKeyboard...iOS 5新增加了一些UIKeyboardDidChangeFrameNotification(will)一般情况下,前两个事件已经可以完成你要做的事转载 2014-06-09 16:47:40 · 646 阅读 · 0 评论 -
NSRunloop的理解
- (IBAction)start:(id)sender{pageStillLoading = YES;[NSThread detachNewThreadSelector:@selector(loadPageInBackground:)toTarget:self withObject:nil];[progress setHidden:NO];while (pageSti转载 2014-06-14 14:37:31 · 716 阅读 · 0 评论 -
[UIColor colorWithRed: green: blue: alpha:] 失效问题
在设置颜色是用[UIColor colorWithRed: green: blue: alpha:] 有时会遇到颜色不显示的问题,,,刚开始以为是设置的颜色值太过浅的原因,后来试了其他的颜色值发觉并不是这样的,网上搜索了一下,发现了问题的所在:RGB的颜色值范围都是在0.0~1.0之间的,并不是我们误认为的0~255。错误用法:[objc] view plain转载 2014-06-14 12:20:50 · 791 阅读 · 0 评论 -
hitTest:withEvent:和pointInside:withEvent:
hitTest:withEvent:方法的处理流程如下:首先调用当前视图的pointInside:withEvent:方法判断触摸点是否在当前视图内;若返回NO,则hitTest:withEvent:返回nil;若返回YES,则向当前视图的所有子视图(subviews)发送hitTest:withEvent:消息,所有子视图的遍历顺序是从top到bottom,即从subviews数组的末尾转载 2014-06-15 13:56:57 · 1517 阅读 · 0 评论 -
__bridge, __bridge_transfer, __bridge_retained 在ARC环境下转换原理解析
参考:http://blog.youkuaiyun.com/bsplover/article/details/7978657http://www.cocoachina.com/applenews/devnews/2013/0411/5975.html转载 2014-06-18 11:23:29 · 1659 阅读 · 0 评论 -
获取UUID,类似于Microsoft的GUID
- (NSString *)makeUUID{ CFUUIDRef uuidRef = CFUUIDCreate(NULL); CFStringRef uuidStringRef = CFUUIDCreateString(NULL, uuidRef); CFRelease(uuidRef);//__bridge: 只是负责两者形式的转换,不涉及内存权限的转移。只涉及在AR转载 2014-06-18 11:10:50 · 674 阅读 · 0 评论 -
iOS多线程系列(2)NSOperation
前面了iOS的NSThread方法来实现多线程,这篇就简单的讲讲NSOperation和NSOperationQueue。 NSOperation是一个抽象类,定义一个要执行的任务。NSOperationQueue是一个任务队列,帮助对NSOperation所定义的任务进行管理。当任务加入到任务队列后,会自动按照优先级和依赖关系自动运行。 NSOperation转载 2014-07-07 17:41:56 · 552 阅读 · 0 评论 -
iOS多线程系列(3)GCD(Grand Central Dispatch)
在2011的WWDC上,苹果推出了GCD,从此多线程增加了一种新的方法。GCD要求运行在iOS4.0版本以上或者OS X10.6版本以上。GCD是Grand Central Dispatch的缩写,是一组用于实现并发编程的C接口。GCD是基于Objective-C的Block的特性开发的,基本的业务逻辑和NSOperation很像。都是添加一个任务到一个队列,由系统来负责线程的生成和调度。因为直接转载 2014-07-07 17:43:22 · 635 阅读 · 0 评论 -
iOS事件拦截处理
前面分析了一通iOS事件的分发,主要介绍了事件如何找到处理的view,又是如何按照responder chain逐级传递的。这篇文章主要介绍iOS事件的拦截以及特殊处理。 我们知道事件的分发是由Application到Window再到各级View的,所以显然最安全可靠的拦截地方是Application。这里拦截事件后如果不手动往下分发,则进入hit-test View过程的机转载 2014-07-07 17:27:09 · 661 阅读 · 0 评论 -
iOS设备是否越狱的判断代码
苹果是非常看重产品的安全性的,所以给用户设计了一套复杂的安全机制。这让喜爱自由,崇尚一切开放的程序员们极度不爽,于是越狱就成了苹果和黑客们反复斗法的场所。总体来说,越狱可以让我们随意安装、共享应用,但确实也降低了设备的安全性,会给一些恶意应用提供方便之门。 有时我们的应用希望知道安装的设备是否已经越狱了,显然,苹果官方不会给出解决方案来的,那么我们怎么办呢?因为越狱后会自动安装c转载 2014-07-07 16:58:01 · 618 阅读 · 0 评论 -
UITextField被软键盘遮挡的解决办法
//开始编辑输入框的时候,软键盘出现,执行此事件 -(void)textFieldDidBeginEditing:(UITextField *)textField { CGRect frame = textField.frame; int offset = frame.origin.y + 32 - (self.view.frame.size.height - 21转载 2014-06-17 09:17:35 · 826 阅读 · 0 评论 -
iOS多线程系列(1)NSThread
多线程这个概念的接触是蛮早的时候了,当时还是单核单CPU的时候,Thread这个概念已经出现了,当时比较流行的方案是时间片轮流,线程可以优先级抢占,但一次只能运行一个线程,实际上多线程是不能真正并行处理的,只是宏观上表现的多线程在齐头并进。现在硬件进步了很多,多核的CPU时代来临了,于是线程开始了真正意义上的并行处理,多线程也作为越来越重要的一个部分需要掌握。 iOS中关于线转载 2014-07-07 17:40:04 · 497 阅读 · 0 评论 -
iOS事件分发
移动平台上的开发主要关注数据以及数据的处理,事件的处理以及UI。所以事件的分发处理是很重要的一个环节,对于一个平台的优劣来说也是一项重要的参数。如果事件的分发设计的不好,一些复杂的UI场景就会变得很难写甚至没法写。从小屏没有触摸的功能机开始到现在大屏多点触摸的智能机,对于事件的分发处理基本思路都是一样的——链(设计模式中有个模式就是职责链chain of responsibility),只是判定的转载 2014-07-07 17:26:16 · 584 阅读 · 0 评论 -
动态调整 UITableViewCell高度
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ //UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forInd转载 2014-06-09 16:35:06 · 659 阅读 · 0 评论 -
Xcode 用lldb命令po(print-object)打印UIView的视图层级
UIView有一个私有方法:recursiveDescription这个方法可以显示出当前视图的详细层级,可以在代码中直接调用,也可以在GDB中调用,在GDB中调用时需要借助另一个GDB命令:print-object:recursiveDescription:由于是私有方法,键入时不会有任何提示,注意不要输错。转载 2014-06-08 11:47:48 · 2898 阅读 · 0 评论 -
NSAttributedString 详解
NSAttributedString可以让我们使一个字符串显示的多样化,但是目前到iOS 5为止,好像对它支持的不是很好,因为显示起来不太方便(至少没有在OS X上方便)。首先导入CoreText.framework,并在需要使用的文件中导入:#import创建一个NSMutableAttributedString:NSMutableAttribut转载 2014-06-08 10:57:16 · 489 阅读 · 0 评论 -
ASIHTTPRequest 之简单使用
ASIHTTPRequest是一个第三方开源项目,在现在的IOS应用中多使用到这个开源类库来提供网络操作,相比于SDK提供的网络操作类库,ASIHTTPRequest使用上更加方便、效率更高,同时功能也非常强大。这是ASIHttpRequest的官网:http://allseeing-i.com/ASIHTTPRequest/以下是官方对ASIHttpRequest的解释:转载 2013-07-22 13:02:27 · 575 阅读 · 0 评论 -
UITabBarController使用详解
UITabBarController是IOS中很常用的一个viewController,例如系统的闹钟程序,ipod程序等。UITabBarController通常作为整个程序的rootViewController,而且不能添加到别的container viewController中。 首先我们看一下它的view层级图:一、手动创建UITabBarController转载 2013-07-22 13:13:01 · 672 阅读 · 0 评论 -
UINavigationController 使用详解
UINavigationController是IOS编程中比较常用的一种容器view controller,很多系统的控件(如UIImagePickerViewController)以及很多有名的APP中(如qq,系统相册等)都有用到。说是使用详解,其实我只会介绍几个自认为比较重要或者容易放错的地方进行讲解,下面让我们挨个探探究竟: 首先上一张图(来自苹果官方文档):转载 2013-07-22 13:10:06 · 598 阅读 · 0 评论 -
removeFromSuperview关键的几个点
removeFromSuperviewUnlinks the receiver from its superview and its window, and removes it from the responder chain.译:把当前view从它的父view和窗口中移除,同时也把它从响应事件操作的响应者链中移除。分析:这里有两个关键点,可以帮助我们理解在ios转载 2013-07-22 13:08:58 · 699 阅读 · 0 评论 -
ASIHTTPRequest 编译提示找不到"libxml/HTMLparser.h"的解决方法
使用ASIHTTPRequest xcode编译提示找不到"libxml/HTMLparser.h",解决方法如下:1>.在xcode中左边选中项目的root节点,在中间编辑区的搜索框中输入"header search paths",双击Header Search Paths项,点击加号增加一项并输入"${SDK_DIR}/usr/include/libxml2",点击done按钮结束转载 2013-07-22 12:59:27 · 560 阅读 · 0 评论 -
Xcode 4.2的编译改动(ARC)
关于ARCARC(Automatic Reference Counting)是一种据说可以自动释放内存的方式,但带来了不少弊端,例如:·如果结构复杂一些的view,系统可能会释放错误。·由于内存是自动释放,所以retain/release/autorelease/dealloc也不能使用了(也不需要使用了),如果使用,反而会报错,如ARCforbidsexplicit转载 2013-07-22 13:14:35 · 704 阅读 · 0 评论 -
NSString、NSData、char* 类型之间的转换
1.NSString转化为UNICODE String:(NSString*)fname = @“Test”;char fnameStr[10];memcpy(fnameStr, [fname cStringUsingEncoding:NSUnicodeStringEncoding], 2*([fname length]));与strcpy相比,memcpy并不是遇到'\0'就结束,而是一转载 2013-07-22 13:07:53 · 535 阅读 · 0 评论 -
iphone 线程总结— detachNewThreadSelector的使用
不管是iphone中还是其他的操作系统,多线程在各种编程语言中都是难点,很多语言中实现起来很麻烦,objective-c虽然源于c,但其多线程编程却相当简单,可以与java相媲美。多线程编程是防止主线程堵塞,增加运行效率等等的最佳方法。而原始的多线程方法存在很多的毛病,包括线程锁死等。一、线程创建与启动线程创建主要有二种方式:(id)init; // designate转载 2013-07-22 13:06:51 · 664 阅读 · 0 评论 -
XCode添加SDK
以添加SDK5.1为例:首先 下载xcode4.3 双击dmg文件打开 右键xcode图标浏览里面的内容 拷贝出上面所说的文件夹 过程如下:1. 复制 文件夹 Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/5.1 (9B176) 到 系统文件夹 Developer/Platformes/iPhoneO原创 2013-09-11 19:58:28 · 3412 阅读 · 0 评论 -
XCode 常见错误
0.unrecognized selector sent to instance:1、向一个已释放对像发送信息2、向一个不存在的对像发送信息,特别注意,有参数的方向法名要加":"号(@seletor(dosomething:))1.this class is not key value coding-compliant for the key ...1、interf转载 2013-07-22 12:56:48 · 912 阅读 · 0 评论 -
Xcode 解决EXC_BAD_ACCESS错误的一种方法--NSZombieEnabled
我们做iOS 程序开发时经常用遇到 EXC_BAD_ACCESS 错误导致 Crash,出现这种错误时一般 Xcode 不会给我们太多的信息来定位错误来源,只是在应用 Delegate 上留下像Thread 1: Program received signal:"EXC_BAD_ACCESS",让问题无从找起。比如你对已释放的对象发送消息时就会出现,EXC_BAD_ACCESS,再如rel转载 2014-06-08 11:49:20 · 782 阅读 · 0 评论 -
XCode lldb Debug 教程
开胃小菜--简单的断点调试在xcode中打开一个app,在想要break的行号上单击,即可生成一个深色的箭头标识--断点。如下图,在viewDidLoad:中设置了断点。LLDB Debug教程" style="margin:0px; padding:0px; border:0px; list-style:none">运行app,等待。。。就可以看到xcode在断点处进入调试模式,转载 2014-06-08 11:50:56 · 674 阅读 · 0 评论 -
XCode gdb/lldb 调试命令
XCode4.0以后,编译器换成了LLVM 编译器 2.0与以前相比,更加强大:1.LLVM 编译器是下一带开源的编译技术.完全支持C, Objective-C, 和 C++.2.LLVM 速度比 GCC快两倍,建立的程序也会运行的更快. 因为它更好的利用现代的芯片的结构.3.LLVM和Xcode 4完全的整合在一起.包括关键字高亮,代码完整性等全都是由LLVM语法转载 2014-06-08 11:46:15 · 649 阅读 · 0 评论 -
拷贝 xxx.app [NSBundle mainBundle] 包里的文件到 Documents 目录下
//把 xxx.app 包里的文件拷贝到 Documents 目录下,并指定是否覆盖,YES 则覆盖- (void)BundleToDocuments:(NSString *)fileName existsCover:(BOOL)cover{ BOOL success; NSError *error; NSFileManager *fileManager = [NSFi原创 2014-07-17 09:36:07 · 1504 阅读 · 0 评论 -
hitTest:withEvent:截获子视图消息
@implementation TempView{ BOOL isSelfTouche;}- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{ if(isSelfTouche) [self removeFromSuperview];}#pragma mark - hitTes原创 2014-07-17 09:35:26 · 826 阅读 · 0 评论