- 浏览: 1101088 次
- 性别:
- 来自: 南京
博客专栏
-
Oracle管理和开发
浏览量:353827
最新评论
-
Simon.Ezer:
请问对于“如果非主键字段值发生改变,则不会同步过去”这种情况, ...
创建增量同步Oracle物化视图问题 -
dahai639:
挺好的,支持一下
Oracle的pipelined函数实现高性能大数据处理 -
zealotpz:
不错,原来是用户oracle 的所属组的问题
以sysdba身份登录oracle报ORA-1031权限不足错误之完美分析 -
mikixiyou:
zhangyuslam 写道如果担心全局索引失效,可以使用如下 ...
Oracle分区表的分区交互技术实现数据快速转移 -
sea0108:
...
Oracle sql loader使用速成
在第二课中,介绍了Objective-C 的一些关键知识点,包括点访问方法,strong 和weak 的比较,nil ,实例化,动态绑定技术(程序在执行时才会知道要执行的代码有没有),自省(选择器的使用),基础的框架如NSObject,NSString 等等。
这些是开发的基础,整理了一遍有利于程序的开发和调整。像类方法只能使用类来调用,实例方法只能使用实例,这点以前还没有明白。对于在实例中怎么不能调用类方法的问题还疑惑了一阵子。
1 、点符号方法访问属性变量
在property 引进后开始使用这个方法,苹果官方解释为这样做是出于代码美观考虑。苹果的产品将美观放在第一位,这产品包括了obj-c 的代码。
使用点符号法self.propery 访问@property 比普通的[self property] 方法更直观。在C 结构体中,也是使用点符号方法访问属性。这两个方法看上去很相似,但它们有两点大不同:
其一,我们不能发送消息给C 结构体,因为C 结构体根本没有可执行的方法。
其二,C 结构体绝不分配在heap 中,因此不能通过指针来访问到它。(注,它分配在stack 中。内存管理中分为heap 和stack )
2 、 strong 和 weak
在定义@property 时,会有选项如strong 、weak 等。
strong 表示保存这个对象在heap 中直到不再有任何指针指向它。(注,我理解为所有指向它的指针不先设置为nil ,它就不会从heap 中清理。)
weak 表示保存这个对象在heap 中,只要其他人strongly 指向了它。如果它从heap 中清理了,会将所有指向它的指针调整为指向nil 。这个功能从iOS5 开始使用。(注,我理解为如果它从heap 中清理后,所有指向它的指针都会自动调整为nil 。)
但是这种清理heap 的机制不是垃圾回收机制,在iOS 上没有这种内存自动回收机制。它采用的一种更好的机制,称之为引用计算(reference counting )。这种机制可以展开来讲很多,但在iOS 中又有了新机制,称为自动应用计算(ARC) 。了解它可以有助于理解内存管理。
在iOS 中还有一种内存释放方法,为dealloc 。
- (void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
这种方法很少会用到,因为如果用到它,则太迟了。估计iOS 已经将应用给杀死了。
3 、 nil
这是一个对象指针的值,表示不指向任何对象。它和原始类型如int double 的“zero “很相似。
在实例变量中,作为一个对象指针类型定义的,其初始值都是nil 。如
id obj = nil;
NSString *hello = nil;
nil 还有一个隐藏的功能,就是它可以放在if 语句中做条件判断。
如if (obj) {run something;} 这个语句,obj 为nil 时则不执行,不为nil 则执行。
对于指针值为nil 的实例变量,任何调用该对象中方法,都不会出错,没有任何方法会被执行。这可以理解为向nil 发送消息时,没得执行啊。
该操作的返回值是0 。如果int i = [obj methodWhichReturnsAnInt]; 则没有问题,返回结果是0 ,属于int 类型;如果CGPoint p = [obj getLocation]; 则就有问题了,返回结果还是0 ,而0 不是CGPoint 类型。CGPoint 是一个C 结构体。(注,类型不一致,会不会crash? )
4 、 BOOL 类型
在Objective-C ,也有一种布尔类型,实质上它是typedef 。
它可以用来做条件判断
if (flag) { }
if (!flag) { }
YES 值意思为true ,NO 值意思为false
N0 值等于0 ,YES 值除0 之外所有的数字
5 、实例方法和类方法
这个知识点很重要,在obj-c 中使用范围很广。他们之间区别有下列几点需要说明。
第一,命名方式上的差别,实例方法是以“- ”开始,类方法是以“+ ”开始。
- (BOOL)dropBomb:(Bomb *)bomb at:(CGPoint)position from:(double)altitude;// 这是实例方法在.h 文件中的声明
+ (id) alloc;// 这是类方法
+ (Ship *)motherShip;
+ (NSString *)stringWithFormat:...
第二,调用语法的差别。
实例方法只能实例去调用,语法为[<pointer to instance> method] 。
例子:
Ship *ship = ...; // instance of a Ship
destroyed = [ship dropBomb:firecracker at:dropPoint from:300.0];
同样,类方法只能用类去调用,语法为[Class method] 。
例子:
Ship *ship = [Ship motherShip];//Ship 是一个类
NSString *resultString =[NSString stringWithFormat:@“%g”, result];//NSString 也是一个类型
[[ship class] doSomething];//ship 是一个实例化的对象,必须使用[ship class] 转换成类后才能调用类方法,而直接使用ship 实例无法调用到类方法。
(注,首字符为大写的都是类,小写的则是实例化的对象,这是命名规则)
第三,self/super 的区别
在类中,使用self/super 的结果都是类;
在实例中,使用self/super 的结果都是实例;
6 、实例化( Instantiation )
其一,使用其他对象创建自己的对象,如
NSString’s - (NSString *)stringByAppendingString:(NSString *)otherString;
NSString’s & NSArray’s - (id)mutableCopy;
NSArray’s - (NSString *)componentsJoinedByString:(NSString *)separator;
其二,也不是所有的使用其他对象创建而生成的对象都是新建的,有的对象会只是一个指针,而不是在heap 中再划分内存创建对象。如,
NSArray’s - (id)lastObject;
NSArray’s - (id)objectAtIndex:(int)index;
但是,如果使用copy 关键字,则会创建新对象。
其三,还可以使用类方法创建对象,如
NSString’s + (id)stringWithFormat:(NSString *)format, ...
UIButton’s + (id)buttonWithType:(UIButtonType)buttonType;
NSMutableArray’s + (id)arrayWithCapacity:(int)count;
NSArray’s + (id)arrayWithObject:(id)anObject;
其四,使用Allocating 和 initializing 创建新对象
例如:
NSMutableArray *stack = [[NSMutableArray alloc] init];
CalculatorBrain *brain = [[CalculatorBrain alloc] init];
Allocating 是通过NSObject 的类方法alloc 在heap 中分配一个空间给新对象。如@synthesize 就是执行这个操作。因此所有的@sythesize 的对象都已经在heap 中分配了一个足够大的内存空间。但这只是第一步,如果要使用该对象,还必须初始化,否则会直接crash 。
Initializing 对于多数类而言,都有很多方法,但NSObject 类只有一个初始化方法为init 。
例如:
- (id)initWithFrame:(CGRect)aRect; // initializer for UIView
UIView *myView = [[UIView alloc] initWithFrame:thePerfectFrame];
- (id)initWithCharacters:(const unichar *)characters length:(int)length;
- (id)initWithFormat:(NSString *)format, ...;
- (id)initWithData:(NSData *)data encoding:(NSStringEncoding)encoding;
在开发类时,初始化方法中的返回类型建议设置成id ,这样做是为了继承。如果它的子类使用它的初始化方法时,直接使用id 类型即可。
例如:
@implementation MyObject
- (id)init
{
self = [super init]; // call our super’s designated initializer
if (self) {
// initialize our subclass here
}
return self;
}
@end
7 、动态绑定
其一,所有的对象都被分配在heap 中,所以你一直可以使用指针
例如:
NSString *s = ...; // 静态类型定义
id obj = s; // 非静态类型定义,但完全合法,不要使用”id *” 因为它表示一个指针的指针。
其二,在runtime 时才会知道运行的代码是什么
静态类型如第一点所说的NSString * 和id 的比较,静态类型只不过在编译时更有利于我们发现bug 。
如果runtime 时,没有找到所运行的代码,就crash 。但我们可以使用“introspection ”去判断代码是否可以执行。
8 、自省( introspection )
自省是对象的固有能力,即程序运行时,对象可根据请求对外透露自身基本特性。您可以给对象发送某种消息,向其询问与它自身相关的问题,对象在Objective-C 运行时将会向您提供答案。自省是很重要的编码工具,它可以让程序变得更加高效健壮。
所有的继承了NSObjec 的对象有拥有下列三个方法:“
isKindOfClass: returns whether an object is that kind of class (inheritance included)
isMemberOfClass: returns whether an object is that kind of class (no inheritance)
respondsToSelector: returns whether an object responds to a given method
方法1 的参数值为[NSString class] ,即发送一个名为class 的类方法给一个类而得到。例如:
if ([obj isKindOfClass:[NSString class]]) {
NSString *s = [(NSString *)obj stringByAppendingString:@”xyzzy”];
}
方法3 的参数值为一个选择器,如@selector(shoot) 。
如果对象中有这个方法shoot ,就响应为true 。例如:
if ([obj respondsToSelector:@selector(shoot)]) {
[obj shoot];
} else if ([obj respondsToSelector:@selector(shootAt:)]) {
[obj shootAt:target];
}
介绍一种新类型SEL ,它是Objective-C 用于选择器的类型。
SEL shootSelector = @selector(shoot);
SEL shootAtSelector = @selector(shootAt:);
SEL moveToSelector = @selector(moveTo:withPenColor:);
在NSObject 类中,可以通过方法performSelector: 或者 performSelector:withObject: 来执行选择器。例如:
[obj performSelector:shootSelector];
[obj performSelector:shootAtSelector withObject:coordinate];
在NSArray 类中,可以通过makeObjectsPerformSelector: 来执行选择器操作。例如:
[array makeObjectsPerformSelector:shootSelector]; // cool, huh?
[array makeObjectsPerformSelector:shootAtSelector withObject:target]; // target is an id
在UIButton 类中,可以通过 - (void)addTarget:(id)anObject action:(SEL)action ...; 方法来执行选择器。例如:
[button addTarget:self action:@selector(digitPressed:) ...];
9 、基础框架
NSObject
在IOS SDK 中,NSObject 是基础类,实现一些方法,如自省的方法等等。
- (NSString *)description is a useful method to override (it’s %@ in NSLog()).
- (id)copy; // not all objects implement mechanism (raises exception if not)
- (id)mutableCopy; // not all objects implement mechanism (raises exception if not)
还有这些常用架构,如NSString ,NSMutableString ,NSNumber (原始类型 int, float, double, BOOL 等等的封装成对象),NSValue ,NSData ,NSDate 。
还有一些集合类型如NSArray ,NSMutableArray ,NSDictionary ,NSMutableDictionary ,NSSet ,NSMutableSet ,NSOrderedSet ,NSMutableOrderedSet 。这些分成三种类别,分别为array,dictionary,set 。
这些类可以使用for in 方法遍历访问他们的成员。
还有Property List 和NSUserDefaults 两个,也需要关注一下。
发表评论
-
在storyboard中view的frame值为0
2013-01-23 13:42 9950在XCode4.5中,我使用storyboard创建一个U ... -
使用UIScrollView和UIPageControl显示半透明帮助蒙板
2012-12-31 13:25 0http://www.cnblogs.com/every200 ... -
char,short ,int ,long,long long,unsigned long long数据范围
2012-12-26 14:02 14522编程语言的基础类型速查表 char -128 ~ +12 ... -
关闭ios虚拟键盘的几种方法
2012-12-26 11:17 26504在iOS应用开发中,有三类视图对象会打开虚拟键盘,进行输入操作 ... -
通过segue切换视图控制器
2012-12-21 11:43 3934在使用storyboard开发iOS应用时,从一个视图控制器的 ... -
NSUnknownKeyException
2012-12-20 21:21 0在写测试程序时,出现下面这个exception, ... -
segue分析小结
2012-12-12 10:15 11136在iOS开发中,segue用来实现storyboard中源视图 ... -
http://stackoverflow.com/questions/7301607/tableview-app-terminated-due-to-nsint
2012-12-08 20:36 0http://stackoverflow.com/questi ... -
Delegate分析小结
2012-12-07 17:29 0Delegate的用途: 用于改变或控制其他对象 。 D ... -
Objective-C的内省(Introspection)小结
2012-12-07 17:02 10632内省(Introspection)是面向对象语言和环境的一个强 ... -
UIApplicationDelegate分析小结
2012-12-06 14:52 13734我们开发出来的运行在iOS平台上的应用程序都有一个UIAppl ... -
NSClassFromString和NSStringFromClass
2012-11-30 17:31 0NSClassFromString 将NSString转换成一 ... -
面向对象的最重要思想-间接
2012-11-28 15:20 0面向对象的最重要思想-间接 -
objective-c的实例变量assign和retain
2012-11-01 11:17 0当和objective-c 对象工作时, assig ... -
Objective-C自学进阶书籍
2012-10-30 09:58 0The Objective-C Programming Lan ... -
objective-c数组使用小结
2012-10-17 15:40 3469使用数组对象创建的数组功能非常强大,在Java语言或者C语言中 ... -
NSString对象的初始化和比较
2012-10-17 13:31 3178NSSting的对象在使用@"xx"直接初 ... -
objective-c的对象定义
2012-10-16 14:39 985在objective-c中定义两个类,用于测试对象的定义操作。 ... -
How To Synchronize Core Data with a Web Service
2012-09-03 13:59 0http://www.raywenderlich.com/15 ... -
NSMutableString转换成NSString的N种方法
2012-08-14 10:35 18151NSString是一个不可变的字符串对象。这不是表示这个对象声 ...
相关推荐
《斯坦福大学NLP工具包:stanford-corenlp-full-2015-12-09.zip深度解析》 斯坦福大学的NLP(自然语言处理)工具包是学术界和工业界广泛使用的资源,它包含了丰富的功能,能够满足多样的自然语言处理任务需求。...
3. **毕业设计/课程设计**: 这个新闻客户端App可能是一个学术项目,用于展示学生在学习Objective-C和iOS开发过程中所掌握的知识和技能,可能是大学课程的一部分,或者是毕业生的最终项目。 【压缩包子文件的文件...
Stanford CoreNLP是斯坦福大学开发的一个强大的自然语言处理(NLP)工具包,它提供了一系列的文本分析功能,如词法分析、句法分析、实体识别、关系抽取、情感分析等。这个特定的版本——2018-10-05,意味着它是2018...
"Stanford CoreNLP"是斯坦福大学自然语言处理(NLP)研究团队开发的一套强大的工具集,广泛应用于文本分析、信息提取、情感分析等多个领域。这个名为"stanford-corenlp-full-2014-08-27"的压缩包包含了2014年8月27日...
StanfordCoreNLP适用于以下情形: 一个具有广泛语法分析工具集成的NLP工具包; 一种广泛应用于生产中的快速、健壮的任意文本注释器; 一个现代化的具有全面高质量的文本分析功能的、定期更新的软件包
### Objective-C 语言基础知识与应用案例详解 #### 一、Objective-C 语言简介 Objective-C 是一种面向对象的编程语言,由苹果公司在 macOS 和 iOS 开发中广泛应用。它基于 C 语言并添加了面向对象的功能,是开发 ...
总之,"iOS7应用开发Machismo(Stanford iOS7)第二节课课堂代码"涵盖了Swift编程语言、iOS应用基础架构、用户界面设计、MVC模式、Auto Layout、Core Data以及网络请求等多方面内容。通过实践这个项目,开发者不仅...
Stanford CoreNLP在Pointer-Generator模型的训练中扮演着关键角色。首先,CoreNLP可以对原始文本进行预处理,包括去除标点符号、停用词处理、词干化等,使得输入到模型的数据更规范,有利于模型学习。其次,CoreNLP...
通过深入研究这个“斯坦福ios7公开课纸牌源码”,开发者不仅能学习到iOS开发的基础知识,还能提升对复杂项目管理、软件设计原则和最佳实践的理解。这是一次宝贵的实践经验,对于想要在iOS开发领域深耕的人来说,不容...
标题中的"PyPI 官网下载 | stanford-corenlp-python-3.3.6-0.linux-x86_64.tar.gz"表明这是一个在Python包索引(PyPI)上发布的软件包,用于在Python环境中使用Stanford CoreNLP。PyPI是Python开发者发布自己软件包...
【标题】"Stanford 2011秋季iOS5作业1"是斯坦福大学2011年秋季学期iOS开发课程的一部分,旨在教授学生如何利用iOS 5 SDK进行应用程序开发。这个作业集涵盖了iOS开发的基础知识,同时也包含了额外的加分任务,以挑战...
- **Stanford University CS193p Course**: 斯坦福大学提供的iOS应用开发课程(CS193p),虽然近年来已经转向Swift教学,但在早期版本中使用Objective-C进行教学,依然是学习Objective-C进行iOS开发的经典资源。...
Stanford Parser是斯坦福大学自然语言处理组开发的一个重要的自然语言处理工具,主要用于句法分析,即解析文本中的句子结构,识别出词汇之间的语法关系,如主谓宾、定状补等。这个工具在自然语言处理(NLP)领域中...
斯坦福大学IOS教程:Stanford CS193P 第二课 网易教程上的PDF文档,希望对大家有用
通过分析和研究这些源码,我们可以深入理解Apple的编程规范,掌握Objective-C和Swift语言的关键特性,以及iOS开发的最佳实践。 首先,源码中的每个项目都是针对课程中某一特定主题设计的,涵盖了iOS开发的多个重要...
### 一、Stanford斯坦福大学公开课:iOS10应用开发 #### 1. 课程背景与意义 - **斯坦福大学**作为全球顶尖的高等教育机构之一,在计算机科学领域拥有极高的声誉。 - 本课程主要面向希望学习或提高iOS应用开发技能的...
### 斯坦福大学iOS开发课程 第一节课全部keynote #### 课程概览 **斯坦福大学iOS开发课程**是一门专为那些希望深入了解iOS应用程序开发的学生设计的专业课程。本课程不仅涵盖基本的编程概念,还深入探讨了...
在2011年秋季,斯坦福大学开设了一门关于iOS开发的课程,其中的第二份作业(Assignment2)旨在深化学生对iOS 5 SDK的理解与应用。这份作业涵盖了一系列的重要知识点,包括Objective-C编程、UIKit框架、用户界面设计...
stanford-corenlp-4.2.2-models-english.jar 包。 下载stanford-corenlp-4.2.2解压后,把这个jar包放到stanford-corenlp-4.2.2里面即可。后面通过路径引用就可以了