
Objective-C
文章平均质量分 71
hherima
移动互联网,大有可为!APP开发经历:飞信、和4G、搜狐视频、56视频等项目。
展开
-
【技巧】reloadSection和relaod方法。cell复用规则不太一样
reloadSection和relaod方法。复用规则不太一样:- (void)reloadSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation NS_AVAILABLE_IOS(3_0);当调用[tableview reload]的时候,当前展示的cell,其实是可以复用...原创 2018-11-27 20:40:04 · 2673 阅读 · 3 评论 -
[@(value) description] 的妙用NSStringFromValue
开发中,经常会用到将int格式化成NSString,还在使用format(@"%d",int);那就过时了。【新用法】看下面宏定义:#define NSStringFromValue(value) [@(value) description]可以这么使用:NSStringFromValue( int 类型)NSStringFromValue( fload 类型) //long 型等,基础数据类型NSStringFromValue( c原创 2015-05-06 10:29:32 · 1612 阅读 · 1 评论 -
工程链接静态库的时候,通过删除class来解决重复的符号的错误
工程链接静态库的时候,通过删除class来解决重复符号(duplicate symbol)的错误 如果你在工程中使用静态库,并且指定了编译选项为-all_load(为了让Objective-C的类别加载正确),静态库中,你的工程包含了一样的class名字,或者跟其他静态库中,有相同的class名字。在链接静,肯定遇到过类似于这样的错误“duplicate symbol”错误。翻译 2014-04-17 18:32:48 · 3812 阅读 · 0 评论 -
iOS类别(Category)与扩展(Extension,匿名类别)
iOS类别(Category)与扩展(Extension,匿名类别) ;包括两者的区别。原创 2015-03-13 16:06:37 · 6307 阅读 · 1 评论 -
instancetype和id类型区别
苹果在iOS 8中全面使用instancetype代替idSteven Fisher:只要一个类返回自身的实例,用instancetype就有好处。@interface Foo:NSObject - (id)initWithBar:(NSInteger)bar; // initializer + (id)fooWithBar:(NSInteger)bar; // convenienc转载 2015-03-03 23:32:42 · 1407 阅读 · 0 评论 -
__weak如何实现对象值自动设置为nil的
__weak 修饰符就像我们知道的那样__weak修饰符提供了如同魔法般的功能。● 若使用__weak修饰符的变量引用对象被废弃时,则将nil赋值给该变量● 使用附有__weak修饰符的变量,就是使用注册到autoreleasepool的对象。原创 2014-08-18 16:56:37 · 6665 阅读 · 1 评论 -
nil Nil NULL NSNull 之间的区别
nil 是对objective c id 对象赋空值例如 NSString * string = [NSString stringWithFormat:@"test"]; string = nil; 对于objective c 集合类对象 比如数组对象,字典对象,当我们不需要再使用他们的时候,对他们release 的同时最好也把他们赋值为nil,这样确保安全性,下面一个转载 2014-11-19 10:51:43 · 1171 阅读 · 0 评论 -
Effective Objective-C(第29-36条)内存管理篇,ARC、循环引用、引用计数
在OC这种面向对象语言里,内存管理是个重要概念。要像用一门语言写出内存使用效率较高且又没有bug的代码,就得掌握内存管理模型的种种细节。一旦理解这些规则,你就会发现,其实OC的内存管理没有那么复杂,再进入ARC之后就更为简单了。原创 2014-08-10 15:08:08 · 4047 阅读 · 0 评论 -
Effective Objective-C(第37-40条)block在栈上?在堆上?
OC中多线程编程的核心就是block与gcd。这虽然是两种不同的技术,但他们是一并引入的。block是一种可在C、C++及OC代码中使用的“词法闭包”(lexical closure),它极为有用,借此机制,开发者可将代码像对象一样传递,令其在不同环境(context)下运行。在block的范围内,它可以访问到其中的全部变量。 gcd是一种与block有关的技术,它提供了对线程的抽象,而这种抽象基于“派发队列”(dispatch queue)。开发者可将block排入队列中,有gcd负责处理所有调度原创 2014-08-10 15:08:45 · 3966 阅读 · 4 评论 -
第二章、Objective-c 语法,继承,protocol和delegate(iOS学习笔记,从零开始)
OC是面向对象编程语言。@interface ViewController :UIViewController上面一行代码展现继承语法,Objective-C只支持单继承,但可以实现多个协议(接口),例如:@interface AppDelegate :UIResponder UIApplicationDelegate,UITabBarContr原创 2013-02-28 16:19:49 · 5472 阅读 · 0 评论 -
iOS内存管理高级指南(官方文档——译文)
iOS内存管理高级指南 应用程序内存管理是:“程序运行时,开辟的内存空间。使用它,释放它”的过程,写的好的程序尽可能少使用内存。在Objective-C中,内存管理被看做是:“在很多数据、代码下,分配受限内存资源所有权方法”。当你依据这个指南完成你的程序时,你将获得“通过显式管理对象的命周期,不使用的时候释放他们,来管理程序内存”的知识。 尽管,典型的内存管理是作用于单个对象,翻译 2013-11-16 12:40:14 · 2981 阅读 · 0 评论 -
转向ARC的说明——翻译Apple官方文档
ARC是一个编译器特征,它提供了对OC对象自动管理内存。ARC让开发者专注于感兴趣的代码和对象的关系,而不是考虑对象的retain和release。(图)概要ARC在编译时期添加代码,保证对象可用。概念上将,ARC遵循手动引用计数的规则,替开发者,在编译时期添加合适的代码。Xcode4.2(Mac OS 10.6、10.7和iOS4和iOS5)支持ARC,弱引用在10.6和iOS4翻译 2013-11-23 15:48:20 · 5062 阅读 · 1 评论 -
NSNotification 也有”消息转发“,会不会崩溃呢?
NSNotification与多线程官方文档:In a multithreaded application, notifications are always delivered in the thread in which the notification was posted, which may not be the same thread in which an observer re...原创 2018-09-26 22:51:21 · 509 阅读 · 0 评论 -
翻译NSTimer官方原文,包括初始化,启动,停止NSTimer
*说明:翻译水平有限,希望对初学者有帮助。本人添加的部分用下划线标明。重点用橙色字体。类 NSTimer 说明一、概述 你可以用NSTimer类来创建定时器对象。经过一定时间启动定时器,并发送一个特定消息给目标对象。比如:你创建了一个定时器,用于一段时间之后,给窗口发了一条消息,告诉它更新。 定时器跟run loops协同工作。想要高效使用NST翻译 2013-03-14 00:32:48 · 3798 阅读 · 0 评论 -
浅析OC和C++的不同
总结一下:Objective-c和C++的不同之处,防止在面试的时候,不知道从何说起!1. 继承+虚函数问题。C++中只有父类是virtual修饰,子类才覆盖。OC中,都是虚函数,所以无需原创 2014-05-13 10:11:23 · 2197 阅读 · 0 评论 -
iOS内存管理之:引用计数、ARC、自动释放池autoreleasepool和便捷方法之间的关系
部分内容摘自《Objective-C基础教程》和互联网引用计数 Cocoa采用了引用计数(reference counting)机制,每一个对象有一个关联的“整数retainCount”用于记录对象的使用情况。对象被引用时retaincount+1,外部环境结束对象的使用后retainCount-1.当retaincount为0的时候,该对象被销毁。 当我们使原创 2013-04-09 18:12:47 · 17499 阅读 · 1 评论 -
Objective-C 给类别添加属性(通过@dynamic和objc_setAssociatedObject实现)
通过@dynamic和objc_setAssociatedObject,实现给类别添加属性,前者是说明程序员自己实现setter和getter,后者是动态给对象添加属性。两个配合使用可以实现给对象添加属性。下面代码以scrollview为例:头文件@interface UIScrollView (Refresh)@property (nonatomic) RefreshView * refreshView;@end源文件#import <objc/runtime.h>static cha原创 2015-04-16 09:40:36 · 3278 阅读 · 0 评论 -
iOS 容易崩溃的地方总结。
● 数组越界● 向dic中插入一个key = nil● 调用一个不存在的函数(#会有警告#)● block为空。+ (NSIndexPath *)indexPathForRow:(NSInteger)row inSection:(NSInteger)section; row和section是负值也会崩溃。[[NSNotificationCenter defaultCen原创 2013-08-26 12:48:23 · 2538 阅读 · 0 评论 -
"Auto Layout still required after executing -layoutSubviews” iOS7上崩溃sdk缺陷
在iOS7系统上,我项目工程里写了一个CinemaMemberView,添加到一个viewController中,结果崩溃了。iOS8和iOS6上则不会崩溃。Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Auto Layout still required after executing -layoutSubviews. CinemaMemberView'simplementat原创 2015-08-07 18:32:11 · 4647 阅读 · 0 评论 -
Objective-C类方法中使用self注意事项
大家需要了解下面的规则:1,实例方法里面的self,是对象的首地址。2,类方法里面的self,是Class。类方法不可以使用实例变量,但可以使用self,因为self不是实例变量。此时.self是Class尽管在同一个类里面的使用self,但是self却有着不同的解读。在类方法里面的self,可以翻译成class self;在实例方法里面的self,应该被翻译成为object self。在类方法里面的self和实例方法里面的self有着本质上的不同,尽管他们的名字都叫self。原创 2015-04-14 09:36:53 · 7530 阅读 · 0 评论 -
iOS 多线程编程gcd全面系统认识
这两天在看《OC高级编程-多线程编程和内存管理》日本人写的那本,该书对arc,block和gcd有了更深层次的解读,非常不错。现在总结一下gcd相关的知识。有关arc和block的参考arc 参考block 网上很多博客都对gcd有过讲解,很多是对gcd的全局队列,主线程队列,创建队列等等,做了单方面的描述,不是很全面系统。下面我们将学习一下系统得gcd。本文主要分为下面几个要点,前几个好点比较好理解,最后可能理解起来有些费劲!● 什么是gcd,iOS为什么要用多线程● 创建线程,序列线程和原创 2014-08-27 11:35:42 · 3330 阅读 · 1 评论 -
Effective Objective-C(第11-14条)动态绑定、objc_msgSend、消息转发机制
第11条:理解objc_msgSend的作用 在对象上调用方法是Objective-C中经常使用的功能。用Objective-C术语来说这叫做:“传递消息”(pass a message)。消息有“名称”(name)或者“选择子”(selector),可以接收参数,而且可能还有返回值。 由于Objective-C是C的超集,所以最好理解C语言的函数调用方式。C语言使用“静态绑定原创 2014-08-10 15:06:27 · 3912 阅读 · 1 评论 -
C++转向Objective-C需要注意的地方(基础)。
部分摘自《Objective-C基础教程》高朝勤 杨越 刘霞译,本人添加一些代码和图片,更容易理解。参考《深度探索C++对象模型》从C++转向Objective-CObjective-C中没有多重继承、命名空间、运算符重载、模板、类变量、抽象类、STL等结构。但是Objective-C提供了相似的结构。Objective-C没有C++中的构造函数、拷贝构造和析构函数是最明智的!当然原创 2013-04-02 14:59:30 · 2114 阅读 · 0 评论 -
第三章、一些基本数据结构使用和解析(iOS学习笔记,从零开始。)
NSString1)rangeOfString:截取指定字符串的长度;NSRange rRange = [newEmotiontextrangeOfString:seperateroptions:NSNEXTSTEPStringEncodingrange:pointer];2) substringToIndex:7:截取从0 索引到指定索引(7)长度的字符串3) subst原创 2013-03-04 14:51:44 · 2252 阅读 · 0 评论 -
第二章、Objective-c 语法,类/属性/函数(iOS学习笔记,从零开始。)
注*需要具备面向对象编程基础。一、OC常识Objective-C是C的超集,也就是说C有的Objective-C都有,Objective-C多了C自身没有的OO(面向对象)特性。Objective-C默认扩展名为 .m 。头文件扩展名跟普通C一样 .h 。Objective-C推荐引入头文件的方式为:#import ,等同于C++的#include二、从“类”说转载 2013-02-28 12:00:06 · 17097 阅读 · 5 评论 -
第三章、基本数据类型(iOS学习笔记,从零开始)
*以下博文转载自 http://blog.youkuaiyun.com/husongchao/article/details/7546768#t2 ,谢谢博主奉献精神。Objective-C中有一些很有趣的数据类型经常会被错误地理解。他们中的大多数都可以在/usr/include/objc/objc.h或者这个目录中的其他头文件中找到。下面是从objc.h中摘录的一段,定义了一些数据类型:转载 2013-03-04 12:06:28 · 1200 阅读 · 0 评论 -
第二章、Objective-C中的@property、@synthesize和dynamic的用法(iOS学习笔记,从零开始)
*以下博文来自 http://justcoding.iteye.com/blog/1444548 非常敬佩作者的分享精神。@代表“Objective-C”的标志,证明您正在使用Objective-C语言Objective-C语言关键词,@property与@synthesize配对使用。功能:让编译器自动编写一个与数据成员同名的方法声明来省去转载 2013-02-28 17:38:10 · 9107 阅读 · 1 评论 -
第二章、小实例,画字,画线,矩形,画图,动画(iOS学习笔记,从零开始。)
源代码再此下载: http://download.youkuaiyun.com/detail/hherima/5108428本博文主要讲如何绘制文字,绘制一条直线,绘制图片,给图片添加动画。首先,创建一个Single View Application的工程。起名字showApp.这是一个空的工程。源文件里只有下图1中的几个源文件。(上图1)我们发现ViewCon原创 2013-03-02 15:31:30 · 5376 阅读 · 0 评论 -
第四章、内存管理(iOS学习笔记,从零开始。)
iPhone/Mac Objective-C内存管理教程和原理剖析前言初学objectice-C的朋友都有一个困惑,总觉得对objective-C的内存管理机制琢磨不透,程序经常内存泄漏或莫名其妙的崩溃。我在这里总结了自己对objective-C内存管理机制的研究成果和经验,写了这么一个由浅入深的教程。希望对大家有所帮助,也欢迎大家一起探讨。 此文涉及的内存转载 2013-03-04 16:48:05 · 1168 阅读 · 0 评论 -
第二章、小控件实例 tableview,button(iOS学习笔记,从零开始。)
源代码再此下载: http://download.youkuaiyun.com/detail/hherima/5108415第一、UIButton,按钮头文件修改如下:@interface Myview : UIView{ UIImage* image1; UIImage* image2; //button UIButton* button原创 2013-03-04 15:25:13 · 1436 阅读 · 0 评论 -
nonatomic,atomic和volatile 关键字
本博客对下面四中情况,进行真机测试: ●类中变量 int cant ●类中 volatile 变量int cnt ●类中 nonatomic 属性int cnt ●类中 atomic 属性int cnt 关于volatile关键字可以参考:C语言中的Volatile关键字。意思是:volatile告诉编译器,计算变量i时,每次强制使用内存中的值原创 2013-05-28 17:59:00 · 3193 阅读 · 0 评论 -
iOS 内存管理实践
内存管理实践尽管基本的概念在“内存管理策略”文章中简单得阐述了,但是还有一些实用的步骤让你更容易管理内存;有助于确保你的程序最大限度地减少资源需求的同时,保持可靠和强大。使用“访问器方法”让内存管理更简单假如,你的程序有一个对象类型的属性,你必须保证:当你使用的时候,任何的已经赋值了的对象不会被销毁。被赋新值的时候,开发者必须获得对象的所有权,并放弃正在使用对象的所有权。有时候,这翻译 2013-11-16 12:40:36 · 3176 阅读 · 0 评论 -
iOS 内存管理策略
内存管理策略(memory Management Policy) NSObject protocol中定义的的方法和标准命名惯例一起提供了一个引用计数环境,内存管理的基本模式处于这个环境中。NSObject类定义了一个方法叫dealloc,当对象销毁的时候,dealloc会被自动调用。本文描述,在Cocoa中所有正确管理内存基本规则,并提供了一些使用正确的例子。【基本的内存管理规则】翻译 2013-11-16 12:40:32 · 3027 阅读 · 0 评论 -
Effective Objective-C(第23-28条)类别、协议,代理,匿名对象、delegate
对象之间经常需要相互通信,而通信方式有很多。Objective-C开发者广泛使用一种名叫“委托模式”(Delegate Pattern)的编程设计模式来实现对象间的通信,该模式的主旨是:定义一套接口,某对象若想接收另一个对象的委托,则需遵从此接口,以便称为“委托对象”(delegate)。而这“另一个对象”则可以给其委托对象回传一些信息,也可以在发生相关联时间时通知委托对象。原创 2014-08-10 15:07:21 · 2732 阅读 · 0 评论 -
Effective Objective-C(第47-52条)系统架构,foundation、for-in、NSTimer
第47条:熟悉系统框架 若是不了解系统架构所提供的内容,那么就可能会把其中已经实现的东西再写一遍。将一系列代码封装为动态库(dynamic library),并在其中放入描述其接口的头文件,这样做出来的东西就叫框架。然而iOS应用程序不允许在其中包含动态库。 开发者使用最对的是Foundation框架,像NSObject、NSArray、NSDictionary原创 2014-08-10 15:13:57 · 2384 阅读 · 0 评论 -
Effective Objective-C(第15-22条)接口与API设计、深拷贝、浅拷贝
近年来,开源社区与开源组件随着iOS开发而流行起来,我们经常使用别人的代码,别人也会看到你的代码。所以,我们要把代码写得清晰一些原创 2014-08-10 15:06:55 · 1939 阅读 · 0 评论 -
Effective Objective-C(第1-5条)熟悉Objective-C
Objective-C通过一套全新的语法,在C语言基础上添加了面向对象特性。OC的语法中频繁使用方括号,而且不吝于写出极长的方法名,这通常令许多人觉得此语言较为冗长。这是这样写出来的代码非常易读,只是C++和Java程序员不太适应。 OC语言学起来很快,但有很多微妙细节需要注意,而且还有许多容易为人所忽略的特性。另一方面,有些开发者并未完全理解或是容易滥用某些特性,导致写出来的代码难以维护,难以调试。本章讲解基础知识,后续各章语言及其相关架构的各个特定话题。原创 2014-08-10 15:03:28 · 2068 阅读 · 0 评论 -
Effective Objective-C(第6-10条)对象、属性、equalToString、关联对象
用Objective-C等面向对象语言编程时,“对象”(object)就是“基本构造单元”(building block),开发者可以通过对象来存储并传递数据。在对象之间传递数据并执行任务的过程就叫做“消息传递”(Messaing)。原创 2014-08-10 15:04:00 · 2229 阅读 · 0 评论 -
《Effective Objective-C 2.0》—(第47-52条)—系统架构,foundation、快速遍历for-in、NSTimer
collection使用无缝桥接快速遍历for-in的使用谨慎NSTimer的循环引用原创 2014-08-10 15:07:15 · 1048 阅读 · 0 评论 -
Effective Objective-C(第41-46条)gcd大中枢派发、performSelector
OC中多线程编程的核心就是block与gcd。这虽然是两种不同的技术,但他们是一并引入的。block是一种可在C、C++及OC代码中使用的“词法闭包”(lexical closure),它极为有用,借此机制,开发者可将代码像对象一样传递,令其在不同环境(context)下运行。在block的范围内,它可以访问到其中的全部变量。 gcd是一种与block有关的技术,它提供了对线程的抽象,而这种抽象基于“派发队列”(dispatch queue)。开发者可将block排入队列中,有gcd负责处理所有调度原创 2014-08-10 15:08:59 · 1965 阅读 · 0 评论