Objective-C中关于NSArray, NSDictionary, NSNumber等写法的进化

从xcode4.4开始,LLVM4.0编译器为Objective-C添加一些新的特性。创建数组NSArray,哈希表NSDictionary, 数值 对象NSNumber时,可以像NSString的初始化一样简单方便。妈妈再也不担心程序写得手发酸了。

有兴趣的朋友可以关注LLVM编译器的相关文档:http://clang.llvm.org/docs/ObjectiveCLiterals.html

关于NSDictionary和NSNumber的例子来自:http://cocoaheads.tumblr.com/post/17757846453/objective-c- literals-for-nsdictionary-nsarray-and

I. NSArray

首先是非常常用的NSArray,NSMutableArray。NSArray是一个初始化后就固定的静态数组。如果想对数组的元素进行 插入,删除,更新等操作,就得使用Objective-C 的动态数组NSMutableArray。

在LLVM4.0之前,NSArray的初始化方法如下。注: 以下的方法在LLVM4.0之后也可以继续使用。

//LLVM4.0之前 NSArray的初始化

NSArray *oldOne = [NSArray arrayWithObjects:@"1st", @"2nd", @"3th", nil];

// 取得数组第2个值

NSString *s = [oldOne objectAtIndex:1];

在LLVM4.0之后,NSArray的初始化方法如下。

NSArray *newOne =@[@"1st", @"2nd", @"3th”];

// 取得数组第2个值

NSString *s = newOne[1];

特别要说一下NSMutableArray。LLVM4.0之前,如果你要更新数组的某个元素,一般使用下面的方法。

//LLVM4.0之前 NSMutableArray的初始化

NSMutableArray *oldMutable = [NSMutableArray arrayWithArray: old];

[mutable replaceObjectAtIndex:1 withObject:@"disposed"]; //更新某个元素

在编写一些常用算法时,下面的特性导致编写起来有一点麻烦。

/*想更新NSMutableArray的某个元素?请先初始化这个元素*/

NSMutableArray *oldMutable = [[NSMutableArray alloc] init]];

/*必须如下给每个元素赋一个初值,否则exception会发生

for (int h = 0; h < 5; h++) {

   [oldMutable addObject:@"1"];

}

@try{

    [mutable replaceObjectAtIndex:1 withObject:@"disposed"];

 }

@catch(NSException *exception){

     NSLog(@“%@“, [exception description]);

}

这而LLVM4.0简化了这一个过程,可以用如下方式简单完成。

//LLVM4.0之后

NSMutableArray *newMutable = [NSMutableArray alloc] init];

newMutable[2] = @"myObject";

时间: 2024-10-29 14:04:34

Objective-C中关于NSArray, NSDictionary, NSNumber等写法的进化的相关文章

Javascript中匿名函数的调用与写法实例详解(多种)_javascript技巧

Javascript中定义函数的方式有多种,函数直接量就是其中一种.如var fun = function(){},这里function如果不赋值给fun那么它就是一个匿名函数.好,看看匿名函数的如何被调用. 方式1,调用函数,得到返回值.强制运算符使函数调用执行 (function(x,y){ alert(x+y); return x+y; }(3,4)); 方式2,调用函数,得到返回值.强制函数直接量执行再返回一个引用,引用再去调用执行 (function(x,y){ alert(x+y);

ThinkPHP中Widget扩展的两种写法及调用方法详解

本文实例讲述了ThinkPHP中Widget扩展的两种写法及调用方法.分享给大家供大家参考,具体如下: Widget扩展一般用于页面组件的扩展,在页面根据需要输出不同的内容,下面介绍一下ThinkPHP中Widget的两种写法及调用 写法一: ArticlWidget.class.php文件: class ArticleWidget extends Widget { /** * * @param array $data * @return type * 调用方法:{:W('ArticleList

Android 中RecyclerView多种item布局的写法(头布局+脚布局)

RecyclerView多个item布局的写法(头布局+脚布局) 上图 github 下载源码 Initial commit第一次提交的代码,为本文内容 以下的为主要代码,看注释即可,比较简单 MainActivity 含上拉加载更多 package com.anew.recyclerviewall; import android.os.Bundle; import android.os.Handler; import android.support.v7.app.AppCompatActivi

[翻译] 用 ObjectiveSugar 扩展NSArray NSDictionary NSSet NSNumber

     source - https://github.com/supermarin/ObjectiveSugar Look like a girl, act like a lady, think like a man, work like a boss. 外表如萝莉,举止赛淑女,思想堪汉子,工作比老板.      A set of functional additions for Foundation you wish you've had at the first place.      

objective c-objectiveC中创建NSMutableArray

问题描述 objectiveC中创建NSMutableArray 有一个NSArray给出下面的数据: 01/14/2013 13:28:06.559 IUser Reader [71164: c07] ( { "id_acompanhante" = ""; "id_evento" = 34; "user_id" = 1; "inserido_por" = "Himself"; name

objective c-从NSArray中访问索引值

问题描述 从NSArray中访问索引值 我需要通过索引访问NSArray的值,但是在下面代码的第三行崩溃了. livevalues=[responseString JSONValue]; NSLog(@"%d",[livevalues count]); NSString *objectvalue = [livevalues objectAtIndex:1]; NSLog(@"redyyyyyyyyyyy%@",objectvalue); 1.livevalues 数

objective c-NSMutableArray中的条目

问题描述 NSMutableArray中的条目 NSMutableArray 中有一些NSNumber . {1 2 3 3 2 1 6 2} 我想知道在列表中每个数字出现的次数: Ex : 1 = 2 2 = 3 3 = 2 6 = 1 解决方案 将所有的条目放到NSCountedSet中 NSCountedSet* countedSet = [[NSCountedSet alloc] initWithArray:array];for (NSNumber* number in countedS

objective c-oc中如何用在main中定义的字符串赋值给创建的类?

问题描述 oc中如何用在main中定义的字符串赋值给创建的类? 解决方案 还有,在main里没看见楼主创建CHBLetter对象 解决方案二: 第二张照片的str=s中的str应该是self.str或者_str,指向该类的属性"str" 解决方案三: 楼主私信要的代码: //返回随机生成的名字 (NSString *)randomForName { NSMutableString *tempStr = [NSMutableString string]; for (int i = 0;

objective c-在Xcode4中调用方法没用回应

问题描述 在Xcode4中调用方法没用回应 如题,要调用的方法是导入工程中的外来文件,但是工程编译成功了,文件方法调用失败.而且也没有错误提示什么的. 问题描述: 1.下载了 Flickr API(4个文件) 到Xcode文件管理器中,指定赋值和链接到我工程中的4个文件. * Flickr.h * Flickr.m * FlickrPhoto.h * FlickrPhoto.m 2.在主视图控制器中,最先导入了外来文件: #import "Flickr.h" #import "