导航: 

  • 基本类型 
  • ID
  • 对象类型常见的有
  • 对象类型
  • -NSLog
  • -NSNumber
  • -NSString和NSMutableString
  • -NSArray和NSMutableArray
  • -NSSet和NSMutableSet
  • -NSDictionary和NSMutableDictionary

基本类型:

Objective-C中的基本类型和C语言中的基本类型一样.主要有:int,long,float,double,char,void, bool等.

在Foundation中,也为些数据定义了别名,如:NSInteger为long,CGFloat为double,BOOL等.

Objective-C也可以用C语言的构造类型,如数组、结构体、同用体等。

对于基本类型变量,不需要用指针,也不用手动回收,方法执行结束会自动回收。

ID:

在object-c中,对象标识被作为一个特殊的数据类型:id。这个数据类型定义为引用对象的指针。实际上是指向对象实例变量的指针。

对象类型常见的有:

NSlog

NSString

NSInteger

NSURL

NSImage

NSNumber

NSLog

格式如下

%@对象

%d,%i整数

%u无符整形

%f浮点/双字

%x,%X二进制整数

%zu size_t %p指针

%e浮点/双字

%g浮点/双字

%s C字符串

%*s Pascal字符串

%c 字符

%C unicha

%lld 64位长整数

(long long)%llu无符64位长整数

%Lf 64位双字

NSNumber

NSNumber是Objective-c的数字对象。需求考虑内存释放问题。

1   NSNumber *number = [NSNumber numberWithInt:123];
2   NSLog(@"%i",[number intValue]);
3   NSLog(@"%i",[number retainCount]);

//输出

2010-12-29 16:02:35.040 HelloWorld[4710:a0f] 123

2010-12-29 16:02:35.042 HelloWorld[4710:a0f] 1

NSString和NSMutableString

NSString是不可变字符串(NSContantString),其变量和其本类型一样不需要手动释放(它的retainCount为-1)。

NSString赋值:

NSString *str1 = @"str....";  //(不需要手动释放)
NSString *str2 = [[NSString alloc] initWithString:@"str..."]; //不需要手动释放

因为对NSString赋值,会产生成的对象,所在方法中用NSString作临时对象,也要考虑内存开消问题。

NSMutableString是可变字符串,若用 “[[NSMutableString alloc] init...]”方法初始化,需要考虑手动释放。

 NSString *str = @"this is str...";
NSMutableString *mstr = [NSMutableString stringWithString:str];
str = @"sss";
NSLog(@"%@",mstr);
NSLog(@"%@",str);

输出:

1 this is str...
2 sss

注:因为NSMutableString是NSString的子类,实际应用中很可以把NSMutableString变量赋给NSString。所以若用NSString做类的属性,也会用手动释放的方式:

 //接口文件
@interface TestProperty : NSObject {
NSString *name;
NSInteger myInt;
} @property (copy,nonatomic) NSString *name;
@property NSInteger myInt;
@end

 //实现类
@implementation TestProperty
@synthesize name;
@synthesize myInt; -(void) dealloc{
self.name = nil;
[super dealloc];
} @end

例:

代码

int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; NSMutableString *str1 = [NSMutableString stringWithString:@"this is str"];
NSMutableString *str2 = [NSMutableString stringWithString:str1];
[str2 appendString:@"sss"];
NSLog(@"%@",str1);
NSLog(@"%@",str2);
[pool drain];
return ;
}

//输出
2010-12-30 11:43:13.511 HelloWorld[2119:a0f] this is str
2010-12-30 11:43:13.521 HelloWorld[2119:a0f] this is strsss
可以看出str2不是指向str1的,而是新的对象!!

NSArray和NSMutableArray

NSArray是不可变数组,一般用于保存固定数据。和NSString不同的是,NSArray有retainCount,所以释放问题。

NSMubleArray是变数组,可以直接对其值进行操作。也可考虑释放问题。

NSMubleArray是NSArray的子类。

 NSArray *arr = [NSArray arrayWithObjects:@"Sep",@"Januay",@"",nil];
NSArray *arr_ = [arr sortedArrayUsingSelector:@selector(compare:)];
NSLog(@"%i",[arr retainCount]);
for(NSString *name in arr_){
NSLog(@"%@",name);
}
//输出
2010-12-29 13:36:16.830 HelloWorld[3325:a0f] 1
2010-12-29 13:36:16.833 HelloWorld[3325:a0f] Januay
2010-12-29 13:36:16.833 HelloWorld[3325:a0f] Sep

代码

 NSMutableArray *arr = [NSMutableArray   arrayWithObjects:@"Sep",@"Januay",@"",nil];
[arr sortUsingSelector:@selector(compare:)];
NSLog(@"%i",[arr retainCount]);
for(NSString *name in arr){
NSLog(@"%@",name);
}
//输出
2010-12-29 13:41:34.925 HelloWorld[3415:a0f] 1
2010-12-29 13:41:34.928 HelloWorld[3415:a0f] Januay
2010-12-29 13:41:34.930 HelloWorld[3415:a0f] Sep

NSSet和NSMutableSet

NSSet和NSMutableSet分别是不可变集合和可变集合。集合是一组单值的操作。NSSet和NSMutableSet都需要考虑释放问题。

代码

 NSSet *set = [NSSet setWithObjects:[NSNumber numberWithInt:],@"bb",@"aa",@"bb",@"aa",nil];
for(id *obj in set){
NSLog(@"%@",obj);
}
NSLog(@"%i",[set count]);
NSLog(@"%i",[set retainCount]);

//输出

2010-12-29 13:56:08.397 HelloWorld[3709:a0f] 10

2010-12-29 13:56:08.400 HelloWorld[3709:a0f] aa

2010-12-29 13:56:08.401 HelloWorld[3709:a0f] bb

2010-12-29 13:56:08.401 HelloWorld[3709:a0f] 3

2010-12-29 13:56:08.402 HelloWorld[3709:a0f] 1

NSDictionary和NSMutableDictionary

dictionary是由键-对象对组成的数据集合。NSDictionay和NSMutableDicionary都需要考虑内存释放问题。

代码

 NSDictionary *dict = [NSDictionary
dictionaryWithObjects:[NSArray arrayWithObjects:@"val1",@"val2",nil]
forKeys:[NSArray arrayWithObjects:@"key2",@"key1",nil]];
for(NSString *key in dict){
NSLog(@"%@",[dict objectForKey:key]);
}
NSLog(@"%i",[dict retainCount]);
[pool drain];

//输出

2010-12-29 15:37:42.745 HelloWorld[4085:a0f] val2

2010-12-29 15:37:42.748 HelloWorld[4085:a0f] val1

2010-12-29 15:37:42.749 HelloWorld[4085:a0f] 1

由上面结果可以看出Dicionary是按Key排序的。


Object-c 中的数据类型的更多相关文章

  1. Object C中的数据类型表

    类型 例子 NSLog chars char 'a', '\n'  %c short int   — %hi, %hx, %ho unsigned short int   %hu, %hx, %ho ...

  2. js中获取数据类型

    ES5中,js中数据类型:number.string.boolean.undefined.null.object js中获取数据类型常用的四种方式 实例: var a = 123, b = true, ...

  3. JavaScript 中的数据类型

    Javascript中的数据类型有以下几种情况: 基本类型:string,number,boolean 特殊类型:undefined,null 引用类型:Object,Function,Date,Ar ...

  4. js中的数据类型

    JS中的数据类型: ——数字  (number)NaN ——字符串(string) ——布尔  (boolean)——函数  (function)     也是对象的一种 ——对象  (object) ...

  5. 如何判断js中的数据类型?

    js六大数据类型:number.string.object.Boolean.null.undefined string: 由单引号或双引号来说明,如"string" number: ...

  6. 如何判断js中的数据类型

    如何判断js中的数据类型:typeof.instanceof. constructor. prototype方法比较 如何判断js中的类型呢,先举几个例子: var a = "iamstri ...

  7. [转]如何判断js中的数据类型

    原文地址:http://blog.sina.com.cn/s/blog_51048da70101grz6.html 如何判断js中的数据类型:typeof.instanceof. constructo ...

  8. 数据库中字段类型对应的C#中的数据类型

    数据库中字段类型对应C#中的数据类型: 数据库                 C#程序 int int32 text string bigint int64 binary System.Byte[] ...

  9. JS中检测数据类型的四种方法

    1.typeof 用来检测数据类型的运算符->typeof value->返回值首先是一个字符串,其次里面包含了对应的数据类型,例如:"number"."st ...

  10. JS中检测数据类型的四种方式及每个方式的优缺点

    //1.typeof 用来检测数据类型的运算符 //->typeof value //->返回值首先是一个字符串,其次里面包含了对应的数据类型,例如:"number". ...

随机推荐

  1. 什么是 Java 内存模型,最初它是怎样被破坏的?(转载)

    活跃了将近三年的 JSR 133,近期发布了关于如何修复 Java 内存模型(Java Memory Model, JMM)的公开建议.原始 JMM 中有几个严重缺陷,这导致了一些难度高得惊人的概念语 ...

  2. Android-Activity临时数据的保存

    Activity临时数据的保存是非常重要的,例如:一款小说APP应用,读者使用这款APP看到了223页,用户也没有去记看了多少页: 突然去接了个电话,或者开启的应用程序太多了,可能会导致这款APP应用 ...

  3. C++裁剪文件,截断文件,_chsize()

    errno_t _chsize_s( int fd, __int64 size ); 详见msdn知识库 _chsize将文件裁剪为指定大小,大小的度量方法与 long ftell(FILE * fp ...

  4. TSQL--SORT MERGE JOIN

    算法:对两表排序,然后对两表依次扫描,找到符合条件的结果集 sort(T1); seort(T2); int k=0;--for T1 index int m=0;--for T2 index whi ...

  5. 提高SQL Server数据库效率常用方法

    1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2.I/O吞吐量小,形成了瓶颈效应. 3.没有创建计算列导致查询不优化. 4.内存不足 5.网络速度慢 6.查询出的数据量过大 ...

  6. Django Managers管理器

    Managers class Manager 管理器是向Django模型提供数据库查询操作的接口.Django应用程序中每个模型至少有一个管理器. Manager names 默认情况下管理器的名字为 ...

  7. I-team 博客的 gitlab-runner 持续集成实践

    做为一个略微看过nodejs语法,但又不懂nodejs的攻城狮,搭建hexo环境很是麻烦,要考虑到FQ版本兼容等问题.于是乎,博主每换一个电脑,为了能继续发博客,都需要在新电脑上花一天时间重新搞一下 ...

  8. MySQL不带where条件的UPDATE和DELETE 限制操作说明

    本文来自 网易云社区 . 数据安全是业务的基石,但是DBA 总会遇到救火情况,业务误删除全表或者误更新错全表业务数据,导致服务不可用 sql_safe_updates参数可以限制不带where条件的u ...

  9. 「HNOI 2015」菜肴制作

    题目链接 戳我 \(Description\) 有若干限制,需要求一个\(1\)到\(n\)的排列,每个限制\((x,y)\)表示\(x\)必须在\(j\)之前,并要求所求的排列满足所有限制并让\(1 ...

  10. NOI2017 酱油记

    侥幸混进市队让我晚退役了几个月..不过终究还是退役了呢..这应该是最后一篇游记了吧.. 考前半个月都在安徽集训..然后发现所有人都停课集训..只有我暑假了开始.. 反正上课各种听不懂..各种被大佬虐. ...