object c 数据类型/对象类型介绍(1)NSString
2010-12-01 16:42
309 查看
字符串是程序设计最常用的数据类型之一了。在Mac/iPhone编程中,苹果为我们提供了一个不同的字符串类型NSString。有别与普通的String为数据类型,NSString其实是一个对象类型。NSString是NSObject(Cocoa Foundation的基础对象)的子类,所以具有NSObject的所有特性,好的和好的… ….
1, 创建一个NSString对象
简单方法:
*上面的不需要操心内存管理哟~
复杂一点儿:(需要内存管理的)
*initWithFormat是其中一个初始化方法,常用的还有
*以上方法得到的NSString的retain值为1,所以记得release掉阿~~
2,使用一个NSString对象
再比如设置一个UIView的标题:
3,释放NSString
*记得不要释放直接用 = @”xxx” 的NSString对象哟,系统会管的~
4,快速使用一个NSString
//这种快速方法返回的是一个retain为1,autorelease的对象,不需要操心它的内存管理
5,常用方法
我喜欢NSString的地方就在于很多方法非常方便,比如:
6,小结
暂时能记起来的就这么些了,有机会再补充,希望大家NS的愉快~
标签:NSString
分类目录: 01 - 基础信息, 01 - 基础信息, Cocoa开发, iPhone开发 | 1 条评论
A 对应64位编程的时候,
对于整数应使用NSInteger和NSUInteger,而非int
对于小数应使用CGFloat,而非float
NSInteger其实是一个自动定义,在32位中为int,而64位中为long。CGFloat的原理类似
标签:64bit, CGFloat, int, NSInteger
分类目录: 01 - 基础信息, 01 - 基础信息, Cocoa开发, iPhone开发 | 评论
什么是assign,copy,retain之间的区别?
assign: 简单赋值,不更改索引计数(Reference Counting)。
copy: 建立一个索引计数为1的对象,然后释放旧对象
retain:释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1
retain的实际语法为:
说了那么麻烦,其实接下来的话最重要:
?如果你不懂怎么使用他们,那么就这样 ->
使用assign: 对基础数据类型 (NSInteger,CGFloat)和C数据类型(int, float, double, char, 等等)
使用copy: 对NSString
使用retain: 对其他NSObject和其子类
nonatomic关键字:
atomic是Objc使用的一种线程保护技术,基本上来讲,是防止在写未完成的时候被另外一个线程读取,造成数据错误。而这种机制是耗费系统资源的,所以在iPhone这种小型设备上,如果没有使用多线程间的通讯编程,那么nonatomic是一个非常好的选择。
标签:assign, atomic, copy, nonatomic, property, retain
分类目录: 01 - 基础信息, 03 - 自定义类, Cocoa开发, iPhone开发 | 1 条评论
M 在看过CS193P的笔记后,以下是真正有用的句子:
dealloc不等于C中的free,dealloc并不将内存释放,也不会将索引计数(Reference counting)降低。于是直接调用dealloc反而无法释放内存。
在Objective-C中,索引计数是起决定性作用的。
标签:dealloc, release
分类目录: 01 - 基础信息, 01 - 基础信息, 02 - Objective-C, 02 - Objective-C, 03 - 内存管理, Cocoa开发, iPhone开发 | 评论
N 以下是来自CS193P的笔记:
1,id关键字在编译时不被检查,而NSObject在编译时会被检查是否被调用一些错误方法。
2,id可以是任何对象,包括非NSObject对象
3,定义id的时候不使用*,NSObject却需要。
我的理解,基本上来讲,定义id类似于定义了一个地址(只有指针,抽象指针),而NSObject是确实的定义了一个逻辑对象的地址。
一个来自CS193P笔记的链接:
http://unixjunkie.blogspot.com/2008/03/id-vs-nsobject-vs-id.html
标签:id, NSObject
分类目录: 01 - 基础信息, 01 - 基础信息, Cocoa开发, iPhone开发 | 评论
I 在CS193P中,Evan强调了以下问题:
为什么要在覆盖init的时候需要检查是否在父类中作初始化,例如:
或
主要是将本地对象用父类的init进行初始化,其中的等号“=”另一方面检查了是不是成功进行了初始化。CS193P提供了更多关于这个的信息:
http://cocoadev.com/index.pl?FactoryMethod
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
不仅仅是init等初始化对象,还有其他一些方法(Method)是需要对自己的父类打声招呼得,例如:
那这个没有super这句会怎么样呢?没事,一样用。这个是一个delegate,所以需要收听的类应该会收听到的。但是既然缺省的方法就是这么写的,我们也没有必要特意去删除掉这个super方法。
小常识: NS是Cocoa类对象类型的前缀,来源于史蒂夫-乔布斯被苹果开除那段时间建立的公司NeXT. @是Cocoa元素的前缀,很多地方我们会看到,比如接下来...
1, 创建一个NSString对象
简单方法:
NSString *aString = @"我是个NS字符串!"; //除了引号外加@, 没别的区别
*上面的不需要操心内存管理哟~
复杂一点儿:(需要内存管理的)
NSString *aString = [[NSString alloc] initWithFormat:@"这也是个NS字符串!"];
*initWithFormat是其中一个初始化方法,常用的还有
//从一个文件读取需要的内容 - (id)initWithContentsOfFile:(NSString *)path encoding:(NSStringEncoding)enc error:(NSError **)error //从一个地址读取需要的内容 - (id)initWithContentsOfURL:(NSURL *)url encoding:(NSStringEncoding)enc error:(NSError **)error
*以上方法得到的NSString的retain值为1,所以记得release掉阿~~
2,使用一个NSString对象
NSString *aString = @"This is a NSString"; NSLog(aString); //在控制台输出信息,该函数方法需要一个NSString对象作为参数 NSLog("这样不会好使的"); NSLog(@"这样就会好使拉~");
再比如设置一个UIView的标题:
[UIView setTitle:aString]; [UIView setTitle:@"标题"]; UIView.title = aString;
3,释放NSString
[aString release]; //对象将被系统释放掉咯
*记得不要释放直接用 = @”xxx” 的NSString对象哟,系统会管的~
4,快速使用一个NSString
NSLog([NSString stringWithFormat:@"一个NS字符串"]);
//这种快速方法返回的是一个retain为1,autorelease的对象,不需要操心它的内存管理
5,常用方法
我喜欢NSString的地方就在于很多方法非常方便,比如:
nString = [aString substringToIndex:4]; //nString将得到aString中的前四个字符
6,小结
暂时能记起来的就这么些了,有机会再补充,希望大家NS的愉快~
标签:NSString
分类目录: 01 - 基础信息, 01 - 基础信息, Cocoa开发, iPhone开发 | 1 条评论
64位编程:整数/小数
2009年06月24日, 7:52 下午A 对应64位编程的时候,
对于整数应使用NSInteger和NSUInteger,而非int
对于小数应使用CGFloat,而非float
NSInteger其实是一个自动定义,在32位中为int,而64位中为long。CGFloat的原理类似
标签:64bit, CGFloat, int, NSInteger
分类目录: 01 - 基础信息, 01 - 基础信息, Cocoa开发, iPhone开发 | 评论
属性项目的定义(property)
2009年06月15日, 6:31 下午@property (copy, nonatomic) NSString *title;
什么是assign,copy,retain之间的区别?
assign: 简单赋值,不更改索引计数(Reference Counting)。
copy: 建立一个索引计数为1的对象,然后释放旧对象
retain:释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1
retain的实际语法为:
- (void)setName:(NSString *)newName { if (name != newName) { [name release]; name = [newName retain]; // name’s retain count has been bumped up by 1 } }
说了那么麻烦,其实接下来的话最重要:
?如果你不懂怎么使用他们,那么就这样 ->
使用assign: 对基础数据类型 (NSInteger,CGFloat)和C数据类型(int, float, double, char, 等等)
使用copy: 对NSString
使用retain: 对其他NSObject和其子类
nonatomic关键字:
atomic是Objc使用的一种线程保护技术,基本上来讲,是防止在写未完成的时候被另外一个线程读取,造成数据错误。而这种机制是耗费系统资源的,所以在iPhone这种小型设备上,如果没有使用多线程间的通讯编程,那么nonatomic是一个非常好的选择。
标签:assign, atomic, copy, nonatomic, property, retain
分类目录: 01 - 基础信息, 03 - 自定义类, Cocoa开发, iPhone开发 | 1 条评论
为什么不能直接调用dealloc而是release
2009年06月15日, 4:33 下午M 在看过CS193P的笔记后,以下是真正有用的句子:
dealloc不等于C中的free,dealloc并不将内存释放,也不会将索引计数(Reference counting)降低。于是直接调用dealloc反而无法释放内存。
在Objective-C中,索引计数是起决定性作用的。
标签:dealloc, release
分类目录: 01 - 基础信息, 01 - 基础信息, 02 - Objective-C, 02 - Objective-C, 03 - 内存管理, Cocoa开发, iPhone开发 | 评论
对比:id与NSObject
2009年06月15日, 3:54 下午N 以下是来自CS193P的笔记:
1,id关键字在编译时不被检查,而NSObject在编译时会被检查是否被调用一些错误方法。
2,id可以是任何对象,包括非NSObject对象
3,定义id的时候不使用*,NSObject却需要。
我的理解,基本上来讲,定义id类似于定义了一个地址(只有指针,抽象指针),而NSObject是确实的定义了一个逻辑对象的地址。
一个来自CS193P笔记的链接:
http://unixjunkie.blogspot.com/2008/03/id-vs-nsobject-vs-id.html
标签:id, NSObject
分类目录: 01 - 基础信息, 01 - 基础信息, Cocoa开发, iPhone开发 | 评论
在子类(sub-class)中覆盖“初始化”和“默认”函数
2009年06月14日, 7:29 下午I 在CS193P中,Evan强调了以下问题:
为什么要在覆盖init的时候需要检查是否在父类中作初始化,例如:
- (id)init { if(self = [super init]) { } }
或
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) { // Custom initialization } return self; }
主要是将本地对象用父类的init进行初始化,其中的等号“=”另一方面检查了是不是成功进行了初始化。CS193P提供了更多关于这个的信息:
http://cocoadev.com/index.pl?FactoryMethod
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
不仅仅是init等初始化对象,还有其他一些方法(Method)是需要对自己的父类打声招呼得,例如:
- (void)viewDidLoad { [super viewDidLoad]; }
那这个没有super这句会怎么样呢?没事,一样用。这个是一个delegate,所以需要收听的类应该会收听到的。但是既然缺省的方法就是这么写的,我们也没有必要特意去删除掉这个super方法。
相关文章推荐
- object c 数据类型/对象类型介绍(1)NSString
- object c 数据类型/对象类型介绍(1)NSString
- 数据类型/对象类型介绍(1)NSString
- 数据类型/对象类型介绍(1)NSString(转帖)
- 数据类型/对象类型介绍(1)NSString
- [Python学习第一天]内置数据类型介绍,万物皆对象!
- 【OC加强】枚举介绍、数组的排序、对象的排序、如何利用block排序以及一些数据类型知识
- Objective-C中基本数据烦类型与对象数据类型相互转换的方法(OC中NSString的常用API的基础应用3)
- (Erlang语言)数据类型详细介绍——boxed对象
- 数据类型/对象类型介绍(2)UINavigationController
- 数据传输对象(DTO)介绍及各类型实体比较
- 应用程序框架实战三十四:数据传输对象(DTO)介绍及各类型实体比较(转)
- H5---js有哪些内置对象?和介绍js的基本数据类型
- 应用程序框架实战三十四:数据传输对象(DTO)介绍及各类型实体比较
- C#中的不可变数据类型介绍(不可变对象、不可变集合)
- Redis常用数据类型介绍、使用场景及其操作命令
- 数据类型包装类,String,对象的复制
- IO流(操作基本数据类型的流对象DataStream)
- 面向对象-基本数据类型对象包装类与新特性
- 黑马程序员----论String,StringBuffer,StringBuilder,基本数据类型对象包装类