黑马程序猿————OC在Foundation框架结构和字符串

------<a href="http://www.itheima.com" target="blank">Java火车、Android火车、iOS火车、.Net火车</a>、我们期待与您的沟通!

-------

Foundation框架中包括了非常多开发中经常使用的数据类型,比方。结构体,字符串。集合类等。是其它iOS框架的基础。

假设想要使用Foundation框架的数据类型,那么仅仅要包括它的

头文件就能够了。即#import<Foundation/Foundation.h>

Foundation中经常使用的结构体:

在foundation框架中,经常使用的结构体有四种:

NSRange

NSPoint\CGpoint

NSSize\CGSize

NSRect\CGRect

NSRange: 表示范围(location   length)

NSRange的定义:位置和长度

typedef struct _NSRange {
     NSUInteger location;
     NSUInteger length;
     } NSRange;
NSRange的基本使用:
// @"i love oc"  //love的范围
    NSRange r1 = {2,4};  //可读性比較差,开发中一般不用
    NSRange r2 = {.location = 2, .length = 4};  //不用

    //实际开发中最经常使用的是使用Foundation自带的函数。例如以下:
    NSRange r3 = NSMakeRange(2, 4); //要求掌握

    //字符串创建最快的方式
    NSString *str = @"i love oc";

   //rangeOfString查找某个字符串的范围,查找love的范围
    //假设找不到,length= 0,location = NSNotFound == -1
    NSRange range = [str rangeOfString:@"love"];
    //打印出来
    NSLog(@"loc = %ld,length = %ld",range.location,range.length);

NSPoint\CGPoint:(表示坐标)

NSPoint和CGPoint是一样的。开发中经经常使用CGPoint

typedef CGPoint NSPoint;
struct CGPoint {
  CGFloat x;
  CGFloat y;      //CGFloat类型。实际就是double
};
typedef struct CGPoint CGPoint;

NSPoint\CGPoint的使用:

    //开发中CGPoint经常使用,由于他是跨平台的
    //创建结构体变量
    NSPoint p1 = CGPointMake(10, 10);    //最经常使用
    CGPoint p2 =  NSMakePoint(10, 10);

NSSize\CGSize:(表示UI元素的尺寸,宽度和高度)

使用方法基本和NSPoint一样

typedef CGSize NSSize;
struct CGSize {
  CGFloat width;
  CGFloat height;
};
typedef struct CGSize CGSize;

NSSize\CGSize的基本使用:

 //创建结构体变量
   NSSize s1 =  CGSizeMake(100, 50);
   NSSize s2 =  NSMakeSize(100, 50);
   CGSize s3 =  NSMakeSize(200, 100);

NSRect\CGRect:(表示一个UI元素的位置和尺寸       CGPoint   CGSize)

typedef CGRect NSRect;
struct CGRect {
  CGPoint origin;
  CGSize size;
};
typedef struct CGRect CGRect;

基本使用:

//创建结构体变量
    //方式一
    CGRect  r1 = CGRectMake(0, 0, 50, 100);
    //方式二
    CGRect r2 = {{0,0},{50,100}};
    //方式三
    CGRect r3 = {p1 ,s2};

    CGRect r4 = {CGPointZero,CGSizeMake(50, 100)};

   //表示原点,开发中常常常使用
    //CGPointZero ==CGPointMake(0, 0);

//    //常规的使用方式:
//    CGRect myRect(CGFloat x,CGFloat y,CGFloat width,CGFloat height)
//    {
//        CGRect rect;
//        rect.origin.x = x;
//        rect.origin.y = y;
//        rect.size.width = width;
//        rect.size.height = height;
//
//        return  rect;
//    }
    //开发中常常是先把结构体转成字符串,然后再打印
    //结构体转换为字符串的方式。要求掌握

    //NSString *str =  NSStringFromPoint(p1);  //把坐标转换成字符串

    //NSString *str = NSStringFromSize(s3);  //吧尺寸转换成字符串

    NSString *str = NSStringFromRect(r1);   //把位置和尺寸转换成字符串的形式打印
     NSLog(@"%@",str);
    //尝试打印,此方式比較麻烦。开发中不使用
   // NSLog(@"x = %f,y = %f ,width = %f,height = %f ",r1.origin.x,r1.origin.y,r1.size.width,r1.size.height);

Foundation 框架中一些经经常使用到的结构体函数:

使用这些函数的前提是加入CoreGraphics框架

 //比較两个点的位置是否同样 (x 、y)
  BOOL b = <span style="color:#ff0000;"> CGPointEqualToPoint(CGPointMake(10, 10), CGPointMake(10, 10));
    //比較两块区域是否同样]
    CGRectEqualToRect(<#CGRect rect1#>, <#CGRect rect2#>)
    //比較两个尺寸是否同样
   CGSizeEqualToSize(<#CGSize size1#>, <#CGSize size2#>)
    //推断这个点是否在区域范围内
    // x(50,100)  y(40,90)
    BOOL b2 = CGRectContainsPoint(CGRectMake(50, 40, 1010, 50), CGPointMake(60, 40));

    NSLog(@"%d",b2);

NSString:

NSString :不可变字符串

NSMutableString :可变字符串

字符串的创建方式:

 //字符串的创建
    NSString *s1 = @"jack";

    NSString *s2 = [[NSString alloc]initWithString:@"jack"];  //差点儿没人用

    NSString *s3 = [[NSString alloc] initWithFormat:@"age is %d",10];

    //C字符串 --> OC字符串
    NSString *s4 = [[NSString alloc]initWithUTF8String:"jack"];

    // OC字符串 --> C字符串
    const char *cs = [s4 UTF8String];

    // NSUTF8StringEncoding 用到中文就能够用这样的编码
    //  读取文件内容的方法
    NSString *s5 = [[NSString alloc]initWithContentsOfFile:@"/Users/mymac/Desktop/test/内存管理/总结.m" encoding:NSUTF8StringEncoding error:nil];

    NSLog(@"\n%@",s5);

    //URL :资源路径
    //协议头://路径
    //(本地文件)file://
    // ftp://
    //http://weibo.com/a.png

    //NSURL *url = [[NSURL alloc]initWithString:@"file:///Users/mymac/Desktop/test/内存管理/总结.m"];

    NSURL *url = [NSURL fileURLWithPath:@"//Users/mymac/Desktop/test/内存管理/总结.m"];

    NSString *s6 =  [[NSString alloc]initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];

    NSLog(@"s6 = \n%@", s6);

    /*
     创建字符串的时候通常也有一些类方法
     一般都会有一个类方法跟对象方法配对,开发中常常使用类方法。非常少使用对象方法,以节省时间
     [NSURL URLWithString:(NSString *)];

     [NSString stringWithFormat:@""];

     [NSString stringWithContentsOfFile:<#(NSString *)#> encoding:<#(NSStringEncoding)#> error:<#(NSError *__autoreleasing *)#>];
     */

字符串写到文件里的方式:

//字符串写到文件里的方法
   [@"jack\njack" writeToFile:@"/Users/mymac/Desktop/test/内存管理/总结.m "atomically:YES encoding:NSUTF8StringEncoding error:nil];

    NSString *str = @"rweudjkqsdjiw";

    NSURL *url = [NSURL fileURLWithPath:@"/Users/mymac/Desktop/test/内存管理/总结.m"];

    [str writeToFile:url atomically:YES encoding:NSUTF8StringEncoding error:nil];

可变字符串的使用:

 //可变字符串的创建
    NSMutableString *s1 = [NSMutableString stringWithFormat:@"age is 10"];

    //拼接内容到S1的后面
    [s1  appendFormat:@" 11 12"];

    //获取is的范围
    NSRange range = [s1 rangeOfString:@"is"];

    [s1 deleteCharactersInRange:range];  //删除

    NSString *s2 = [NSString stringWithFormat:@"age is 10"];

    NSLog(@"s1 = %@,s2 = %@",s1,s2);

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS火车、.Net火车</a>、我们期待与您的沟通! -------

版权声明:本文博客原创文章,博客,未经同意,不得转载。

时间: 2024-08-09 17:55:24

黑马程序猿————OC在Foundation框架结构和字符串的相关文章

黑马程序员————OC中Foundation框架的结构体和字符串

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------- ------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>

黑马程序员-OC学习笔记之Foundation框架NSNumber、NSValue和NSDate

---------------------- IOS开发.Android培训.期待与您交流! ---------------------- 一.NSNumber 前几篇笔记中,小桥复习了Foundatio框架中的几个类,这三个是OC学习的尾声了. 小桥已经复习过OC数组类NSArray,也说过它只能存放OC的对象,对于基本的数据类型确无能为力,但是实际编程中经常要把基本的数据如int.float,结构体存放的OC数组中,怎么办?这里的NSNumber就有用了,它能够把基本数据类型包装成OC对象.

黑马程序员——oc语言学习心得—— 属性声明和赋值

黑马程序员——oc语言学习心得—— 属性声明和赋值 -------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 1,在oc中所有类继承与终极父类Object2,声明字符变量采用N是string  *_xxx 实例变量一般以下划线开头3,在oc中方法以+ -号区分 -号开头是实例方法或对象方法  +号开头是类方法  前置用对象调用 后者用类名调用4,在xcode4以后声明@property 不用在写@snysize  自动生成get.set方法5,属性

黑马程序员-OC self super isa指针

self指针: self是oc面向对象设计中的一个特殊指针,相当于java中的this,但是比this强大,this只能访问实例对象的相关方法和成员变量,或者说this只代表实例对象: self不仅可以代表实例对象,还可以代表类对象:谁调用当前方法,self就代表谁:如果self用在了以"-"号的方法中,也就是对象方法中,那么就代表实例对象,若果在"+"号开头的方法中,self就代表类对象,因为只有类对象才能调用以"+"号开头的方法: self调

黑马程序员 oc与c的区别,联系

1.文件的扩展名的区别       1>c语言源文件的扩展名是.c,而oc的扩展名是.m       2>c语言经过编译之后得到的目标模块扩展名是.obj,而oc编译之后是.o       3>c语言目标程序与其他目标程序和库函数经过连接得到可执行文件的扩展名是.exe,而oc是.out2.两者的编程思想是不同的        c语言是面向过程的编程语言,oc是面向对象的编程语言3.oc语言对于c语言的拓展       oc是面向对象的编程语言,它的基本数据类型比c语言多了个bool类型

黑马程序员-OC面向对象继承关系和组合关系笔记

继承关系是描述类和类之间的关系,两个类分别称为子类和父类,子类继承了父类,子类就拥有了父类的属性和方法: 继承的关系特点描述出来就是:** "是" **  (例如:学生类 是 人类) 组合关系描述的语句是:**** "拥有" ***  (例如:学生有成绩这个属性,而成绩属性本来就是一个成绩类的对象 ) 继承示例代码: #import <Foundation/Foundation.h> //Animal类的声明 @interface Animal : NS

黑马程序员—oc语言学习心得—block

黑马程序员—oc语言学习心得—block -------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 1,程序一般用typedef定义一个block类型 然后调用 typedef void(^xxx)(); 可使用助记符 inlineblock 2,Block内部可以访问外部变量:默认情况下,Block内部不能修改外部的局部变量 给局部变量加上__block关键字,则这个局部变量可以在block内部进行修改. 3,block的作用: 利用block封

黑马程序员-OC学习笔记之ARC

---------------------- IOS开发.Android培训.期待与您交流! ----------------------一.什么是ARC        ARC是自动引用计数,苹果官方在Xcode4.2及以后版本中加入的一个内存管理机制,完全取代了程序员人工的内存管理,使得程序员只须关心程序本身.使用ARC,编译器会自动在代码中加入内存管理代码,是一个编译器特性,而不是运行时特性,当然,它也和JAVA的垃圾回收不同,它的本质和手动的内存管理是一样的,只是这些代码编译器会自动添加.

黑马程序员-OC特有语法:分类category,给NSString增加方法计算字符串中数字的个数

1:分类的使用场景:想对一个类,扩充一些功能,而又不改变原来类的模型,也不用继承,这时OC中的特有语法:分类可以做到: 当然分类也是一个类,也需要声明和实现,声明在.h文件中,实现在.m文件中,格式如下 // 声明 @interface  类名  (分类名称) @end // 实现 @implementation 类名 (分类名称) @end 2:分类的好处,当一个类比较庞大时,不同的部分可以放到不同的分类中,也方便团队中类的开发: 3:分类使用注意: a:分类不能增加成员变量,只能对原类增加方