热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Foundation框架中常用结构体和类的介绍

本文介绍了Foundation框架中一些常用的结构体和类,包括表示范围作用的NSRange结构体的创建方式,处理几何图形的数据类型NSPoint和NSSize,以及由点和大小复合而成的矩形数据类型NSRect。同时还介绍了创建这些数据类型的方法,以及字符串类NSString的使用方法。

表示范围作用的结构体:color="#000000">NSRange: 
    
有三种方式创建新的NSRange:

1、NSRange range;

           range.location
= 17;
          
range.length = 4;
     2、NSRange range = {17 ,4};

     3、NSRange range = NSMakeRange(17,4);
(推荐)

表示用来处理几何图形的数据类型:NSPoint(点坐标)和NSSize(长度和宽度)还有一个 size="3" face="微软雅黑">矩形数据类

型(由点和大小复合而成)NSRect


face="微软雅黑">Cocoa 提供创建这些数据类型方法:

face="微软雅黑">NSMakePoint( )、

face="微软雅黑">NSMakeSize()

face="微软雅黑">NAMakeRect()

 

表示字符串的类NSString
NSString *heigth =[NSString stringWithFormat :
@"You heigth is %d feet,%d inches", 5,11];


创建的类对象包含了指向超类的指针、类名和指向类方法的列表的指针。类对象还包含一个long
的数据, 为新创建的类对象指定大小。
返回字符串中的字符的个数:
unsigned int length = [heigth length];


返回Bool 值的字符串比较函数:
- (BOOL) isEqualToString
:(NSString *)aString;//比较两个字符串的内容是否相等


还可以使用compare :方法

-(NSComparisonResult)compare :( NSString *)string;//逐个字符比较


不区分大小写的比较:
-(NSComparisonResult)compare :(
NSString *)string options:( unsigned)mask;

注意:NSComparisonResult 是一个枚举值 options 是一个位掩码,即:

NSCaseInsensitiveSearch:不区分大小写
NSLiteralSearch: 进行完全比较,区分大小写

NSNumericSearch: 比较字符串的字符个数,而不是字符值


检查字符串是否以另一个字符串开头
-(BOOL)hasPrefix :
(NSString *)aString;


判断字符串是否是以另一个字符串结尾
-(BOOL)hasSuffix :
(NSString *)aString;


如果你想知道字符串内的某处是否包含其他字符串,使用rangeOfString : 方法

-(NSRange)rangeOfString :( NSString *)aString;


NSString 是不可变的,NSMutableString
是可变的。用方法stringWithCapacity :来创建 NSMutableString *string = [NSMutableString
stringWithCapacity :42];
可以使用appendString :或appendFormat : 来附加新字符串:
-
(void) appendString :(NSString *)aString;
- (void) appendFormat :(NSString
*)format , . . . ;
可以使用deleteCharactersInRange : 方法删除字符串中的字符
- (void)
deleteCharactersInRange : (NSRange)range;


color="#ff0000" size="4">集合家族:
NSArray:用来存储对象的有序列表(任意类型的对象)

限制:只能存储Objective—C 的对象,不能存储C 语言的基本数据类型(int、float、enum、struct、或者NSArray
中的随机指针)。同时也不能存储nil(对象的零值或NULL 值)

 
//创建一个新的NSArray

NSArray *array =[NSArray arrayWithObjects :
@"one",@"two", nil];

 
//获得包含的对象个数
-
(unsigned)count;

 
//获得特定索引处的对象
-
(id)objectAtIndex :( unsigned int)index ;

 
切分数组:

使用componentsSeparatedByString : 来切分NSArray,
NSString *string = @"oop :
ack : bork : greeble : ponies" ;
NSArray *chunks = [string
componentsSeparatedByString : @":"];

size="3">


使用componentsJoinedByString : 来合并NSArray 中的元素并创建字符串
string = [chunks
componentsJoinedByString :@":-)"] ;


NSArray 是不可变数组,数组中包含的对象是可以改变的,但是数组对象本身是不会改变的。

 
可变数组NSMutableArray 通过类方法arrayWithCapacity :来创建可变数组
+
(id)arrayWithCapacity :( unsigned)numItems ;
NSMutableArray *array =
[NSMutableArray arrayWithCapacity : 17];


使用addObject : 在数组末尾添加对象
- (void)addObject :( id)anObject


删除特定索引的对象
- (void)removeObjectAtIndex :( unsigned)index;


注:可变数组还可以在特定索引处插入对象,替换对象,为数组排序,NSArray 还提供了大量好用的功能。
size="4">枚举:
NSEnumerator 用来描述这种集合迭代器运算的方法:

要想使用NSEnumerator,需要通过objectEnumerator 向数组请求枚举器:
- (NSEnumerator *)
objectEnumerator;


可以像这样使用这个方法:
NSEnumerator *enumerator;
enumerator = [array
objectEnumerator ];


注:若想从后向前枚举集合,使用方法reverseobjectEnumerator ; 也可以使用。
获得枚举器以后,开始while
循环,每次循环都向这个枚举器请求它的nextObject
- (id)nextObject;//返回nil 表明循环结束

注:在枚举的过程中不能改变数组容器。


快速枚举示例:
for(NSString *string in array){
NSLog(@"I found %@",
string);
}


数组排序:
例如:一条记录就是一条卡片的信息,包括(NSString *name 和NSString *email)

-(void)sort
{
[book sortUsingSelector:@selector(compareNames:)]

}

其中:
@selector(compareNames:)
//创建一个SEL
类型的selector,sortUsingSelector:使用该方法比较数组中的两个元素,

sortUsingSelector:方法需要完成这样的比较,它先调用这个指定的selector 方法,然后向数组(接受
者)的第一条记录发送消息,比较其参数和此记录。指定方法的返回值为NSComparisonResult 类型,返
回值为:若小于返回NSOrderedAscending;相等返回NSOrderedSame;大于返回NSOrderedDescending

 
-(NSComparisonResult)compareNames:(id)element
{
return
[name compare:[element name]];
}


NSDictionary:(关键字和定义的组合

NSDictionary 通常在给定一个关键字(通常是一个NSString 字符串)下存储一个数值(可以是任何类
型的对象)。然后你可以使用这个关键字查找相应的数值。

 
使用dictionaryWithObjectsAndKeys :来创建字典
+
(id)dictionaryWithObjectsAndKeys :( id)firstObject , . . .


例如:
Tire *t1 = [Tire new];
NSDictionary *tires = [ NSDictionary
dictionaryWithObjectsAndKeys :t1,@"front-left",nil];


使用方法objectForKey :来获取字典中的值
- (id)objectForKey :( id)akey;


查找轮胎可以这样:
Tire *tire = [tires objectForkey : @"front-left"];

创建新的NSMutableDictionary 对象,向类NSMutableDictionary 发送dictionary 消息。也可以使用
dictionaryWithCapacity : 方法来创建新的可变字典
+ (id)dictionaryWithCapacity :(unsigned
int)numItems ;
可以使用方法setObject :forKey :方法给字典添加元素
setObject : forKey :(
id)aKey


下面是另一种使用发送dictionary 消息来创建字典的方法:
NSMutableDictionary *tires;

tires = [NSMutableDictionary dictionary] ;
[tires setObject :t1 forKey
:@"front-left"];
. . .
注:若对字典中已有的关键字使用setObject :forKey :方法,则用新的替换

可以使用removeObjectForKey : 方法来删除可变字典中的一个关键字
- (void)removeObjectForKey
:(id)aKey ;
注:不要去创建NSString、NSArray 或NSDictionary 的子类,实在要的话可以用复合的方式来解决问题。


使用这种方法枚举词典:
for(NSString *key in g)
{
. . .
}


集合对象
Set
是一组单值对象的集合,有可变和不可变,操作包括:搜索、添加、删除集合中的成员(仅用于可变集合)、比较两个集合,计算两个集合的交集和并集等。

#import
常用的NSSet 方法

face="微软雅黑">

































方法


说明


+(id)setWithObjects:obj1,obj2,...,nil


使用一列对象创建新集合


-(id)initWithObjects:obj1,obj2,...,nil


使用一列对象初始化新分配的集合


-(NSUInteger)count


返回集合的成员个数


-(BOOL)containsObject:obj


确定集合是否包含obj


-(BOOL)member:obj


使用isEqual:方法确定集合是否包含obj


-(NSEnumerator *)objectEnumerator


为集合中的所有对象返回一个NSEnumerator 对象



-(BOOL)isSubsetOfSet:nsset


确定receiver 的每个成员是否都出现在nsset 中


-(BOOL)intersectsSet:nsset


确定是否receiver 中至少一个成员出现在对象nsset 中


-(BOOL)isEqualToSet:nsset


确定两个集合是否相等



常用的NSMutableSet 方法(NSSet 的子类)






























方法 说明

-(id)setWithCapacity:size


创建新集合,使其具有存储size 个成员的初始空间


-(id)initWithCapacity:size


将新分配的集合设置为size 个成员的存储空间


-(void)addObject:obj


将对象obj 添加到集合中


-(void)removeObject:obj


从集合中删除对象obj


-(void)removeAllObjects


删除接受者的所有成员


-(void)unionSet:nsset


将对象nsset 的所有成员昂添加到接受者


-(void)minusSet:nsset


从接受者中删除nsset 的左右成员


-(void)intersectSet:nsset


将接受者中的所有不属于nsset 的元素删除



注:NSInteger 不是一个对象,基本数据类型的typedef,被typedef 成64 位的long 或32 位int
各种数值:

 
NSNumber:
可以使用对象来封装基本数值。

 
NSNumber 类来包装基本数据类型。
+ (NSNumber *)numberWithChar :(
char)value ;
+ (NSNumber *)numberWithInt :( int )value ;
+ (NSNumber
*)numberWithFloat :( float)value ;
+ (NSNumber *)numberWithBool :(
BOOL)value ;

 
还有包括无符号版本和各种long 型数据及long long 整型数据
例如:NSNumber *number =
[NSNumber numberWithInt : 42] ;

 
将一个基本类型封装到NSNumber 后,可以使用下列方法重新获得:
方法说明

+(id)setWithObjects:obj1,obj2,...,nil 使用一列对象创建新集合

-(id)initWithObjects:obj1,obj2,...,nil 使用一列对象初始化新分配的集合

-(NSUInteger)count 返回集合的成员个数
-(BOOL)containsObject:obj 确定集合是否包含obj

-(BOOL)member:obj 使用isEqual:方法确定集合是否包含obj
-(NSEnumerator
*)objectEnumerator 为集合中的所有对象返回一个
NSEnumerator 对象

-(BOOL)isSubsetOfSet:nsset 确定receiver 的每个成员是否都出现在
nsset 中

-(BOOL)intersectsSet:nsset 确定是否receiver 中至少一个成员出现
在对象nsset 中

-(BOOL)isEqualToSet:nsset 确定两个集合是否相等
方法说明
-(id)setWithCapacity:size
创建新集合,使其具有存储size 个成员的初始空间
-(id)initWithCapacity:size 将新分配的集合设置为size 个成员的存储空间

-(void)addObject:obj 将对象obj 添加到集合中
-(void)removeObject:obj 从集合中删除对象obj

-(void)removeAllObjects 删除接受者的所有成员
-(void)unionSet:nsset 将对象nsset
的所有成员昂添加到接受者
-(void)minusSet:nsset 从接受者中删除nsset 的左右成员

-(void)intersectSet:nsset 将接受者中的所有不属于nsset 的元素删除
- (char)charValue;

- (int)intValue;
- (float)floatValue;
- (BOOL)boolValue;
-
(NSString *)stringValue;

 
NSValue:
NSNumber
实际上是NSValue 的子类,NSValue 可以封装任意值。可以用NSValue 将结构放入NSArray 和NSDictionary 中。

创建新的NSValue:
+(NSValue *)valueWithBytes : (const void *) value objCType
: (const char *)type;


@encode 编译器指令可以接受数据类型的名称并为你生成合适的字符串。
NSRect rect =
NSMakeRect(1,2,30,40);
NSValue * value ;
value = [NSValue valueWithBytes
: &rect objCType : @encode(NSRect)];

 
使用getValue :来提取数值(传递的是要存储这个数值的变量的地址)(先找地址再取值)
value = [array
objectAtIndex : 0];
[ value getValue : & rect ] ;


注:Cocoa 提供了将常用的struct 型数据转化成NSValue 的便捷方法:
+ (NSValue
*)valueWithPoint :( NSPoint)point ;
+ (NSValue *)valueWithSize :(
NSSize)size;
+ (NSValue *)valueWithRect :( NSRect)rect ;
-
(NSSize)sizeValue;
- (NSRect)rectValue;
- (NSPoint)pointValue;


NSNull:
在关键字下如果属性是NSNull
表明没有这个属性,没有数值的话表明不知道是否有这个属性。[NSNull null] //总返回一样的值
+ (NSNull *)null;

例如:
[contast setObject : [NSNull null] forKey: @"home"];
访问它:
id
home = [contast objectForKey : @"home" ] ;
if ( home = = [NSNull null] ) {

. . .
}


NSFileManager 允许对文件系统进行操作(创建目录、删除文件、移动文件或获取文件信息)

//创建一个属于自己的NSFileManager 对象
NSFileManager *manager = [NSFileManager
defaultManager] ;
//将代字符‘~’替换成主目录
NSString *home = [@"~"
stringByExpandingTildeInPath] ;
//输出文件的扩展名
- (NSString
*)pathExtension

 




?






1


  

Foudation框架之一些常用结构体和常用类,布布扣,bubuko.com


推荐阅读
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 深入理解 Oracle 存储函数:计算员工年收入
    本文介绍如何使用 Oracle 存储函数查询特定员工的年收入。我们将详细解释存储函数的创建过程,并提供完整的代码示例。 ... [详细]
  • 本文介绍如何通过Windows批处理脚本定期检查并重启Java应用程序,确保其持续稳定运行。脚本每30分钟检查一次,并在需要时重启Java程序。同时,它会将任务结果发送到Redis。 ... [详细]
  • QUIC协议:快速UDP互联网连接
    QUIC(Quick UDP Internet Connections)是谷歌开发的一种旨在提高网络性能和安全性的传输层协议。它基于UDP,并结合了TLS级别的安全性,提供了更高效、更可靠的互联网通信方式。 ... [详细]
  • 本文总结了2018年的关键成就,包括职业变动、购车、考取驾照等重要事件,并分享了读书、工作、家庭和朋友方面的感悟。同时,展望2019年,制定了健康、软实力提升和技术学习的具体目标。 ... [详细]
  • 在计算机技术的学习道路上,51CTO学院以其专业性和专注度给我留下了深刻印象。从2012年接触计算机到2014年开始系统学习网络技术和安全领域,51CTO学院始终是我信赖的学习平台。 ... [详细]
  • CSS 布局:液态三栏混合宽度布局
    本文介绍了如何使用 CSS 实现液态的三栏布局,其中各栏具有不同的宽度设置。通过调整容器和内容区域的属性,可以实现灵活且响应式的网页设计。 ... [详细]
  • Linux 系统启动故障排除指南:MBR 和 GRUB 问题
    本文详细介绍了 Linux 系统启动过程中常见的 MBR 扇区和 GRUB 引导程序故障及其解决方案,涵盖从备份、模拟故障到恢复的具体步骤。 ... [详细]
  • 本文介绍了如何使用jQuery根据元素的类型(如复选框)和标签名(如段落)来获取DOM对象。这有助于更高效地操作网页中的特定元素。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文介绍如何在 Xcode 中使用快捷键和菜单命令对多行代码进行缩进,包括右缩进和左缩进的具体操作方法。 ... [详细]
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
  • 在Linux系统中配置并启动ActiveMQ
    本文详细介绍了如何在Linux环境中安装和配置ActiveMQ,包括端口开放及防火墙设置。通过本文,您可以掌握完整的ActiveMQ部署流程,确保其在网络环境中正常运行。 ... [详细]
  • 本文介绍如何通过SQL查询从JDE(JD Edwards)系统中提取所有字典数据,涵盖关键表的关联和字段选择。具体包括F0004和F0005系列表的数据提取方法。 ... [详细]
  • 本章将深入探讨移动 UI 设计的核心原则,帮助开发者构建简洁、高效且用户友好的界面。通过学习设计规则和用户体验优化技巧,您将能够创建出既美观又实用的移动应用。 ... [详细]
author-avatar
手机用户2502885031
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有