黑马程序员——入学Blog10----Foundation框架常用的结构体与类

-----------android培训java培训iOS培训.Net培训、期待与您交流!------------  
      前面所写的main.m文件都有以下的这句
#import <Foundation/Foundation.h>
      代表着要引入Foundation框架的Foundation.h
/*	Foundation.h
	Copyright (c) 1994-2012, Apple Inc. All rights reserved.
*/

#include <CoreFoundation/CoreFoundation.h>

#import <Foundation/NSObjCRuntime.h>
#import <Foundation/NSArray.h>
#import <Foundation/NSAutoreleasePool.h>
#import <Foundation/NSBundle.h>
#import <Foundation/NSByteOrder.h>
#import <Foundation/NSCalendar.h>
#import <Foundation/NSCharacterSet.h>
          Foundation.h有Foundation框架中定义的各种类的声明,比如NSArray,NSAutoreleasePool。下面就介绍Foundation框架中常用的数据结构
         1.NSRange
typedef struct _NSRange {
    NSUInteger location;
    NSUInteger length;
} NSRange;
typedef unsigned long NSUInteger;  // 无符号长整形
            NS是前缀,range有区间的意思,所以这个结构体表示的是一个以location为起始位置,长度为length的区间
        
         2.NSPoint
typedef CGPoint NSPoint;
/* Points. */

struct CGPoint {
  CGFloat x;
  CGFloat y;
};
typedef struct CGPoint CGPoint;

typedef CGFLOAT_TYPE CGFloat;

# define CGFLOAT_TYPE double
      Point是点,所以这个结构体是一个二维坐标
    
       3.NSSize
typedef CGSize NSSize;

/* Sizes. */

struct CGSize {
  CGFloat width;
  CGFloat height;
};
typedef struct CGSize CGSize;
     NSSize结构体中的变量类型与NSPoint一样,但从成员变量的命名可以看出,CGSize(NSSize)结构体代表的是矩形的宽度和高度

     4.NSRect
typedef CGRect NSRect;

/* Rectangles. */

struct CGRect {
  CGPoint origin;
  CGSize size;
};
typedef struct CGRect CGRect;
      已知一个顶点坐标与矩形的宽高,那么矩形就被确定了,所以NSRect表示的是一个矩形
//  main.m


#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])
{

    @autoreleasepool {
        NSRange range = NSMakeRange(1, 1);
        NSPoint point = NSMakePoint(10, 20);
        NSSize size = NSMakeSize(30, 40);
        NSRect rect = NSMakeRect(point.x, point.y, size.width, size.height);
        NSLog(@"断点");
    }
    return 0;
}



        5.NSString类
         字符串是用途很广泛的数据类型,所以OC中定义字符串的方法就不止一种。
    @autoreleasepool {
        NSRange range = NSMakeRange(1, 1);
        NSString *str1 = @"直接赋值";
        NSString *str2 = [[NSString alloc] initWithString:str1]; // 利用对象方法
        NSUInteger i = 5;
        NSString *str3 = [NSString stringWithFormat:@"变量%ld + 字符串组合",i];
        NSLog(@"断点");
    }

断点查看
       
       还有其它很多种途径可以创建一个NSString对象,通过文件,通过URL等等。
//  main.m


#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])
{

    @autoreleasepool {
        NSRange range = NSMakeRange(1, 1);
        NSString *str1 = @"直接赋值";
        NSString *str2 = [[NSString alloc] initWithString:str1]; // 利用对象方法
        NSUInteger i = 5;
        NSString *str3 = [NSString stringWithFormat:@"变量%ld + 字符串组合",i];
        NSString *str4 = @"test";
        // 字符串截取
        NSString *substr1 = [str1 substringFromIndex:1];
        NSString *substr4 = [str4 substringFromIndex:1];
        NSString *substr3 = [str3 substringWithRange:range]; // 根据指定区间截取字符串
        NSLog(@"substr1 = %@, substr2 = %@",substr1,substr4);
        
        // 取得字符串指定索引的元素值
        unichar charstr2 = [str2 characterAtIndex:1];
        NSLog(@"charstr2 = %c",charstr2);
        
        // 字符串的替换
        NSString *str5 = [str1 stringByReplacingOccurrencesOfString:@"直接" withString:@"hello"];
        NSLog(@"字符串str5= %@",str5);
        
        // 字符串的大小写转换
        NSString *str6 = [str4 uppercaseString];
        NSString *str7 = [str6 lowercaseString];
        
        // 字符串首字母大写
        NSString *str8 = [str4 capitalizedString];
        NSLog(@"str6 = %@,str7 = %@,str8 = %@",str6,str7,str8);
        
        // 比较两个字符串内容是否相同
        BOOL isEqual = [str1 isEqualToString:str2];
        NSLog(@"str1与str2字符串内容是否相同?%d",isEqual);
        
        // 两个字符串的大小比较
        [str2 compare:str4];
        // - (NSComparisonResult)compare:(NSString *)string;
        // typedef NS_ENUM(NSInteger, NSComparisonResult) {NSOrderedAscending = -1L, NSOrderedSame, NSOrderedDescending};
        // 比较的结果是个枚举值{-1,0,1}
        
        // 判断字符串是否已指定字符串结尾
        BOOL isApp = [str1 hasSuffix:@".app"];
        NSLog(@"是否APP?%@",isApp?@"是":@"不是");
        
        // 字符串搜索
        NSRange range2 = [str3 rangeOfString:substr3];
        NSLog(@"range2.location = %ld,rang2.length = %ld",range2.location,range2.length);
        
        // 根据指定字符分割字符串
        NSArray *ary = [@"a,b,c,d,e,f,g" componentsSeparatedByString:@","];
        // 利用Block迭代数组
        [ary enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
            NSLog(@"%@",obj);
        }];
        NSLog(@"断点");
    }
    return 0;
}
运行结果:
            
        分析:字符串的字串的计数不是按字符,而是按字数的,hasSuffix方法可以用来判断文件类型,NSString是不可变对象,也就是初始化是什么值,后面不会被改变。
      6.NSMutableString类
        可变的字符串类。
        NSMutableString *mstr = [[NSMutableString alloc] initWithString:@"mutableString"];
        // 添加字符串
        [mstr appendFormat:@" hello"];
        [mstr appendString:@" world"];

       7.NSArray及NSMutableArray类
        NSArray *array1 = @[@"1",@"2",ary];        // 数组元素可以是不同对象
        NSArray *array2 = [[NSArray alloc] init];  // 空数组
        NSArray *array3 = [[NSArray alloc] initWithArray:array1];  // 利用数组对象初始化数组
        NSArray *array4 = [[NSArray alloc] initWithObjects:@"3",@"4", nil]; // nil是数组结束标志
        
        // 获取元素个数
        NSLog(@"array1有%ld个数组元素",[array1 count]);
        
        // 获取数组指定下标的元素
        NSLog(@"数组array1中下标为1的元素为%@",[array1 objectAtIndex:1]);
        

运行结果:
           


          NSArray和NSString一样都是不可变对象,而且NSArray也有一个对应的可变数组NSMutableArray
@interface NSMutableArray : NSArray
          NSMutableArray类是NSArray对象的子类。
// 初始化可变数组
        NSMutableArray *marray1 = [[NSMutableArray alloc] initWithArray:array1]; // 用NSArray对象初始化NSMutableArray对象
        NSMutableArray *marray2 = [[NSMutableArray alloc] initWithObjects:@"123", nil];
        
        // 添加元素到数组中
        [marray2 addObject:@"a"];
        NSLog(@"marray2 = %@",marray2);
        
        // 判断元素是否在数组中
        BOOL isContains = [marray2 containsObject:@"123"];
        NSLog(@"marray2数组中是否包含OC字符串123?%@",isContains?@"在":@"不在");
        
        // 将元素插入数组指定位置
        [marray2 insertObject:@"456" atIndex:1];
         NSLog(@"marray2 = %@",marray2);
运行结果:



     添加的数组元素默认会添加到数组的最后

       8.NSSet类
        NSSet和NSArray有相似之处,都能存储不同的对象的地址,不过NSArray是有序的,NSSet是无序的
        NSSet *set1 = [NSSet set];    // 创建一个空的Set对象
        NSSet *set2 = [NSSet setWithArray:array1]; // 用数组作为参数创建一个Set对象
        NSSet *set3 = [NSSet setWithObject:@"123"]; // 用对象作为参数创建一个Set对象
        // 输出set2对象包含几个元素
        NSLog(@"%ld",[set2 count]);
        
        // 判断元素是否在Set中
        BOOL isInSet = [set3 containsObject:@"1234"];
        NSLog(@"OC字符串1234是否在set3对象中? %@",isInSet?@"包含":@"不包含");
        
        // 返回Set对象中的一个元素,如果Set对象为空则返回nil
        id s = [set2 anyObject];
        NSLog(@"%@",s);
        
        // 判断连个Set对象是否相同
        BOOL isEqual2 = [set1 isEqualToSet:set2];
        NSLog(@"set1与set2是否相同?%@",isEqual2?@"相同":@"不相同");
运行结果:

   
     9. NSDictionary类
      字典以键值对作为其中的元素,可以通过键(Key),快速得到值(Value)。
NSArray *province = [[NSArray alloc] initWithObjects:@"浙江",@"湖南",@"福建", nil];
        NSArray *city = [[NSArray alloc] initWithObjects:@"杭州",@"长沙",@"福州", nil ];
        NSDictionary *provincialCity = [[NSDictionary alloc] initWithObjects:city forKeys:province]; // key:省名 value:省会
        // 遍历
        [provincialCity enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
            NSLog(@"%@的省会是%@",key,obj);
        }];
        // 返回一个数组,其中包含所有的键
        [provincialCity allKeys];
        
        // 返回一个数组,其中包含所有的值
        [provincialCity allValues];
        
        // 根据key值返回value
        id v = [provincialCity objectForKey:@"浙江"];
        NSLog(@"%@",v);
        // 初始化一个可变字典
        NSMutableDictionary *mprovincialCity = [[NSMutableDictionary alloc] initWithDictionary:provincialCity];
        
        // 添加一个键值对
        [mprovincialCity setObject:@"武汉" forKey:@"湖北"];
        NSLog(@"%@",mprovincialCity);
        
        // 删除一个键值对
        [mprovincialCity  removeObjectForKey:@"湖北"];
        NSLog(@"%@",mprovincialCity);
运行结果:



     

 



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了小程序应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值