Foundation框架基本数据类型
NSNubmer
NSNumber是一个类,该类中存在多种处理数值的方法,可直接创建该类的实例变量
// 定义3个NSNumber类型的变量
NSNumber *myNumber, *floatNumber, *intNumber // 顶一个一个NSInteger的变量,NSInteger不是对象,而是使用typedef定义的一种数据类型
NSInteger myInt // 实例化一个NSNumber类,并为其设定一个100的整形数值,将这个类实例赋给intNumber
intNumber = [NSNumber numberWithInteger:]; // 调用NSNumber类中的integerValue方法获取整数值赋值给NSInteger类型变量myInt
myInt = [intNumber integerValue];
在上述例子中,integerValue只能获取integer类型的变量。
也可以通过手动分配内存的方式创建NSNumber类实例,如:
// 创建一个包含整数类型,值为50的NSNumber实例变量
NSNumber *myNumber = [[NSNumber alloc] initWithInt: ];
注意,通过手动分配内存方式创建NSNumber实例变量的实例不能修改其值,否则会报错。
NSString
在Object-c中创建一个字符串变量非常简单,如:@"program "
但是注意,这里的字符串变量是常量,即一旦定义后,就不可以改变其值。它实际上是NSConstantString类的实例,该类是NSString的子类。
在NSLog中,可以通过%@来输出一个字符串常量
NSString *myStr = @"this is a string";
NSLog(@"%@", myStr);
%@不仅仅可以显示字符串,还可以用它来打印一个对象。
当用%@来打印一个对象时,该对象会自动调用description方法,默认会打印出该对象的类名,以及该对象在内存中的地址,可以通过重写description方法来更改这一默认行为。
NSString *str1 = @"string1";
NSString *str2 = @"string2";
NSString *ref; ref = [NSString stringWithString: str1];
str1 = [str1 uppercaseString];
str2 = [stringByAppendingString: str1];
8 ref = [str2 uppercaseString];
上述代码首先创建了3个NSString类型的常量变量
当更改其中任意一个常量值的时候,其实是更新了该类型所自定的内存地址,即指向了新的地址从而达到更新值的效果。
[NSString stringWithString: str1];
该语句会真是的去创建一个新的对象,该对象中值的地址会指向str1的内存地址
ref = str1;
只是简单的创建了一个指向str1对象的内存地址指针
注,上述所说的常量是指存储在内存中的值是常量,即存储在内存中的string1和string2是不可变更,而str1、str2和ref所指向的内存地址是可变的。在上述各个变更值的过程其实是创建了一个新的NSString对象并对其进行初始化操作。
第五行中系统创建一个新的对象并初始化其值为str1所指向的值赋给ref
第八行同样也是创建一个新的对象,但此时第五行创建的内存已经无法被引用了,不过不必担心,系统会自动对其销毁。
在NSString类中,一些方法在调用或返回时需要提供一个范围参数,Object-C提供了一种特殊类型:NSRange,这种类型实际上是定义的一个结构,该结构含有两个元素:location和length。这两个元素都是NSUinteger类型的变量。
subRange = [str1 rangeOfString: @"string A"];
NSLog (@"String is at index %lu, length is %lu", subRange.location, subRange.length);
可通过NSMutableString类创建一个字符可变的对象,该类属于NSString的子类,所以该类的实例可以调用NSString类中定义的所有方法。
这里所说的可变指的是真正更改内存中存储的值
#import <Foundation/Foundation.h>
int main (int argc, char * argv[]) {
@autoreleasepool {
NSString *str1 = @"This is string A";
NSString *search, *replace;
NSMutableString *mstr;
NSRange substr;
// Create mutable string from nonmutable
mstr = [NSMutableString stringWithString: str1];
NSLog (@"%@", mstr);
// Insert characters
[mstr insertString: @" mutable" atIndex: ];
NSLog (@"%@", mstr);
// Effective concatentation if insert at end
[mstr insertString: @" and string B" atIndex: [mstr length]];
NSLog (@"%@", mstr);
// Or can use appendString directly
[mstr appendString: @" and string C"];
NSLog (@"%@", mstr);
// Delete substring based on range
[mstr deleteCharactersInRange: NSMakeRange (, )];
NSLog (@"%@", mstr);
// Find range first and then use it for deletion
substr = [mstr rangeOfString: @"string B and “];
if (substr.location != NSNotFound) {
[mstr deleteCharactersInRange: substr];
NSLog (@"%@", mstr);
}
// Set the mutable string directly
[mstr setString: @"This is string A"];
NSLog (@"%@", mstr);
// Now let’s replace a range of chars with another
[mstr replaceCharactersInRange: NSMakeRange(, ) withString: @"a mutable string"];
NSLog (@"%@", mstr); // Search and replace
search = @"This is"; replace = @"An example of";
substr = [mstr rangeOfString: search];
if (substr.location != NSNotFound) {
[mstr replaceCharactersInRange: substr withString: replace];
NSLog (@"%@", mstr);
}
// Search and replace all occurrences
search = @"a"; replace = @"X";
substr = [mstr rangeOfString: search];
while (substr.location != NSNotFound)
{
[mstr replaceCharactersInRange: substrwithString: replace];
substr = [mstr rangeOfString: search];
}
NSLog (@"%@", mstr);
}
return ;
}
行6创建了一个NSMutableString类型实例变量mstr
行9将mstr指向的内存中的值设置为str1所指向的内存地址中所存储的值。当stringWithString方法返回给一个NSMutableString类型变量时会返回一个值可变的对象,而该方法返回给一个NSString类型变量时,返回的是一个值不可变的对象。
行12在mstr字符串中的指定位置插入给定的字符串,该方法没有返回值,因为它直接对mstr对象进行操作。
NSArray
Foundation框架基本数据类型的更多相关文章
- Foundation框架 - 结构体
一.基础知识 如果要想使用 Foundation 框架的数据类型,那么包含它的主头文件就可以了.即 #import <Foundation/Foundation.h> 补充: Core F ...
- iOS Foundation 框架概述文档:常量、数据类型、框架、函数、公布声明
iOS Foundation 框架概述文档:常量.数据类型.框架.函数.公布声明 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业 ...
- Foundation框架下的常用类:NSNumber、NSDate、NSCalendar、NSDateFormatter、NSNull、NSKeyedArchiver
========================== Foundation框架下的常用类 ========================== 一.[NSNumber] [注]像int.float.c ...
- iOS开发系列—Objective-C之Foundation框架
概述 我们前面的章节中就一直新建Cocoa Class,那么Cocoa到底是什么,它和我们前面以及后面要讲的内容到底有什么关系呢?Objective-C开发中经常用到NSObject,那么这个对象到底 ...
- Foundation框架-NSString和NSMutableString
可变与不可变的字符串 --1-- Foundation框架介绍 1.1 框架介绍 --2-- NSString 2.1 NSString介绍及使用 2.2 NSString创建方式 2.3 从文件中 ...
- Core Foundation框架
转载自:http://blog.csdn.net/weiwangchao_/article/details/7744972 Core Foundation框架 (CoreFoundation.fram ...
- 08OC之Foundation框架
1.Foundation框架简述 在前面,我们创建一个类的时候,都会选择Cocoa Class.到底Cocoa Class是什么东西呢? Cocoa 不是一门编程语言,因为它可以运行在多种编程语言上, ...
- Objective-C语言Foundation框架
Mac OS X开发会使用Cocoa框架,它是一种支持应用程序提供丰富用户体验的框架,它实际上由:Foundation和Application Kit(AppKit)框架组成.iOS开发,会使用Coc ...
- foundation框架—结构体
Foundation框架—结构体 一.基本知识 Foundation—基础框架.框架中包含了很多开发中常用的数据类型,如结构体,枚举,类等,是其他ios框架的基础. 如果要想使用foundation框 ...
随机推荐
- 设计模式之美:Adapter(适配器)
索引 别名 意图 结构 参与者 适用性 效果 相关模式 实现 实现方式(一):简单直接的对象适配器. 实现方式(二):实现双向类适配器. 别名 包装器(Wrapper) 意图 将一个类的接口转换成客户 ...
- ASP.NET 5系列教程(七)完结篇-解读代码
在本文中,我们将一起查看TodoController 类代码. [Route] 属性定义了Controller的URL 模板: [Route("api/[controller]") ...
- IOS Storyboard使用-模拟登录、注册、混合使用
最近分析IOS的占有率,发现5.0以下的少之又少了,故而决定新的App用 Storyboard开发,找了很多资料都是点上的,这个简单的demo是测试代码,发上来,供新手参考. 模拟登录.注册.和显示主 ...
- 【UML】类图的几种关系总结
在UML类图中,常见的有以下几种关系:泛化(Generalization), 实现(Realization),关联(Association),聚合(Aggregation),组合(Compositi ...
- Kafka重复消费和丢失数据研究
Kafka重复消费原因 底层根本原因:已经消费了数据,但是offset没提交. 原因1:强行kill线程,导致消费后的数据,offset没有提交. 原因2:设置offset为自动提交,关闭kafka时 ...
- Atitit.hybrid混合型应用 浏览器插件,控件的实现方式 浏览器运行本地程序的解决方案大的总结---提升用户体验and开发效率..
Atitit.hybrid混合型应用 浏览器插件,控件的实现方式 浏览器运行本地程序的解决方案大的总结---提升用户体验and开发效率.. 1. hybrid App 1 1.1. Hybrid Ap ...
- android WebView控件显示网页
有时需要app里面显示网页,而不调用其他浏览器浏览网页,那么这时就需要WebView控件.这个控件也是很强大的,放大,缩小,前进,后退网页都可以. 1.部分方法 //支持javascriptweb.g ...
- wicket基础应用(3)——wicket控件的隐藏和显示
在一个项目,页面经常要显示和隐藏一些控件,用wicket来控制显示和隐藏控件相当的方便. 1.最简单的隐藏和显示方法: wicket的控件大部分都有setVisible(...)方法,用这个方法就可以 ...
- 负margin在布局中的运用
一.左右栏宽度固定,中间栏宽度自适应 <!DOCTYPE html> <html> <head lang="en"> <meta char ...
- dom4j 读取xml
package core.util; import java.io.File; import java.util.Iterator; import java.util.List; import org ...