Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c "的详情是什么?;“目标-C文字”;在Xcode 4.4发行说明中提到过吗?_Objective C_Xcode_Objective C Literals - Fatal编程技术网

Objective c "的详情是什么?;“目标-C文字”;在Xcode 4.4发行说明中提到过吗?

Objective c "的详情是什么?;“目标-C文字”;在Xcode 4.4发行说明中提到过吗?,objective-c,xcode,objective-c-literals,Objective C,Xcode,Objective C Literals,我在浏览Xcode 4.4的发行说明时注意到: LLVM4.0编译器 Xcode现在包括Apple LLVM编译器版本4.0,包括以下新的Objective-C语言功能: […] -Objective-C文字:为NSArray、NSDictionary和NSNumber创建文字,与NSString的文字相同 我对这个功能很感兴趣。我并不完全清楚NSString的文字是如何工作的,以及如何在NSArray、NSDictionary和NSNumber上使用它们 详细信息是什么?Objective-C

我在浏览Xcode 4.4的发行说明时注意到:

LLVM4.0编译器

Xcode现在包括Apple LLVM编译器版本4.0,包括以下新的Objective-C语言功能: […]
-Objective-C文字:为NSArray、NSDictionary和NSNumber创建文字,与NSString的文字相同

我对这个功能很感兴趣。我并不完全清楚
NSString
的文字是如何工作的,以及如何在
NSArray
NSDictionary
NSNumber
上使用它们


详细信息是什么?

Objective-C编译器对
NSConstantString
类(也称
\u CFConstantString
类)实例的内存布局具有硬编码知识。查看clang源代码中的
RewriteObjCStringLiteral
函数。编译器只是发出与
NSConstantString
类的实例布局匹配的数据

对于literal
NSArray
NSDictionary
实例,有两种可能性。它们可以做一些类似于对文本字符串所做的事情——在编译器中硬编码实例布局(对于一个特殊的子类),并在该布局中发出数据。或者,他们可以让编译器发出代码,只在运行时创建实例。

逐字复制自:

Objective-C文本:现在可以为NSArray、NSDictionary和NSNumber创建文本(就像可以为NSString创建文本一样)

非数组文字 以前:

array=[NSArray arraywhithobjects:a、b、c、nil];
现在:

array=@[a,b,c];
NSDictionary文本 以前:

dict=[NSDictionary Dictionary WithObjects:@[o1,o2,o3]
福克斯:@[k1,k2,k3]];
现在:

dict=@{k1:o1,k2:o2,k3:o3};
NSNumber字面值 以前:

NSNumber*number;
数字=[NSNumber numberWithChar:'X'];
编号=[NSNumber numberWithInt:12345];
数字=[NSNumber numberWithUnsignedLong:12345ul];
编号=[NSNumber numberWithLongLong:12345ll];
数字=[NSNumber numberWithFloat:123.45f];
数字=[NSNumber numberWithDouble:123.45];
编号=[NSNumber numberWithBool:是];
现在:

NSNumber*number;
数字=@'X';
数字=@12345;
数字=@12345ul;
数字=@12345ll;
编号=@123.45f;
数字=@123.45;
数字=@是;

[编辑]

zxoq at增加了更有趣的新订阅。(添加文字):

arr[1]==[arr objectAtIndex:1]
dict[@“key”]===[dict objectForKey:@“key”]

[编辑2]

在多个会议中讨论了新的ObjC文本。我故意没有删除文件名和每张幻灯片的时间,这样你可以自己找到它们,如果你愿意的话。它们本质上与本文中所述的内容相同,但也有一些我将在图片上方提到的新内容

请注意,图像都是大的。只需将它们拖动到另一个选项卡中,即可按原始大小查看它们

[NSNumber numberwhithint:42]
[NSNumber Number With Double:10.8]
[NSNumber number Withbool:是]
[NSNumber Number Withint:6+x*2012]

@42
@10.8
@对
@(6+x*2012)

[NSArray阵列,其中包含对象:a、b、c、nil]
[数组对象索引:i]
[NSDictionary Dictionary WithObjectsSandKeys:v1、k1、v2、k2、nil];
[字典值forkey:k]

@[a,b,c]
数组[i]
@{k1:v1,k2:v2}
字典[k]


这部分是新的表达式文字 当你有一个表达式(
M_PI/16
)时,你应该把它放在括号里

此语法适用于数字表达式、布尔、在(C-)字符串中查找索引、布尔值、枚举常量甚至字符串

NSNumber*pioversixten=[NSNumber numberwhithdouble:(M_PI/16)];
NSNumber*hexDigit=[NSNumber numberWithChar:“0123456789ABCDEF”[i%16];
NSNumber*usesScreenFonts=[NSNumber numberWithBool:[NSLayoutManager usesScreenFonts]];
NSNumber*writingDirection=[NSNumber numberWithInt:NSWritingDirectionLeftToRight];
NSNumber*path=[NSString stringWithUTF8String:getenv(“路径”)];

NSNumber*pioversixten=@(M_PI/16);
NSNumber*hexDigit=@(“0123456789ABCDEF”[i%16]);
NSNumber*usesScreenFonts=@([NSLayoutManager usesScreenFonts]);
NSNumber*writingDirection=@(NSWritingDirectionLeftToRight);
NSNumber*path=@(getenv(“path”);

有关字符串以及如何/何时使用此文字语法的详细信息:

NSString*path=[nsstringwithutf8string:getenv(“path”);
对于(在[path componentsSeparatedByString:@::“]中的NSString*dir){
//在目录中搜索文件。。。
}

NSString*path=@(getenv(“path”);
对于(在[path componentsSeparatedByString:@::“]中的NSString*dir){
//在目录中搜索文件。。。
}

数组文字如何工作

//编写此代码时:
数组=@[a,b,c];
//编译器生成:
id对象[]={a,b,c};
nsuiger count=sizeof(objects)/sizeof(id);
数组=[NSArray arrayWithObjects:objects count:count];

字典文本如何工作

//编写此代码时:
dict=@{k1:o1,k2:o2,k3:o3};
//编译器生成:
id对象[]={o1,o2,o3};
id键[]={k1,k2,k3};
nsuiger count=sizeof(objects)/sizeof(id);
dict=[NSDictionary Dictionary WithObjects:对象
福克斯:钥匙
计数:计数];

有关数组订阅的详细信息

@实现歌曲列表{
NSMUTABLEARRY*\u歌曲;
}
-(歌曲*)那么
NSNumber *someBool = [NSNumber numberWithBool:YES];
//BOOL literal
NSNumber *someBool = @YES;
     
NSNumber *someChar= [NSNumber numberWithChar:'a'];
//character literal
NSNumber *someChar = @'a';
     
NSNumber *someInt = [NSNumber numberWithInt:1];
NSNumber *someInt = [NSNumber numberWithUnsignedInt:1U];
NSNumber *someInt = [NSNumber numberWithLong:1L];
NSNumber *someInt = [NSNumber numberWithLongLong:1LL];
//integer literal
NSNumber *someInt = @1;
NSNumber *someInt = @1U;
NSNumber *someInt = @1L;
NSNumber *someInt = @1LL;
     
NSNumber *someFloat = [NSNumber numberWithFloat:3.141592654F];
NSNumber *someFloat = [NSNumber numberWithDouble:3.1415926535];
//float literal
NSNumber *someFloat = @3.141592654F;    
NSNumber *someFloat = @3.1415926535; 
NSArray *someArray = [NSArray arrayWithObjects: @"A", @"B", @"C", nil];
//array literal
NSArray *someArray = @[ @"A", @"B", @"C" ];

NSDictionary *someDict = [NSDictionary dictionaryWithObjectsAndKeys:
                           @"key1", @"value1",
                           @"key1", @"value2",
                           nil];
//dictionary literal
NSDictionary *someDict = @{ @"Character" : @"Zelda",
                         @"key1" : @"value2",
                         @"key2" : @value2 };
NSString *var1 = [someArray objectAtIndex:0]; // Returns 'A' 
NSString *var2 = [someDict objectForKey:@"key1"]; // Returns 'value1'
//Collection Subscripting
//read
NSString *var1 = someArray[0]; // Returns 'A'
NSString *var2 = someDict[@"key1"]; // Returns 'value1'
//write to mutable collection
someArray[0] = @"AA";
someDict[@"key1"] = @"value11";
//Syntax @( <expression> )
[NSNumber numberWithInt:(INT_MAX + 1)];
//Boxed Expressions
NSNumber *var = @(INT_MAX + 1);