黑马程序员—Objective-C学习—Foundation—结构体和NSString

------ Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

一、Foundation – 结构体

1、NSRange(location length)表示范围
a、location和length是两个unsigned long类型的数据

b、常用定义方法:NSRange r = NSMakeRange(2, 4);

#import <Foundation/Foundation.h>

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

    @autoreleasepool {

       /*

         NSRange(location length)

         NSPoint\CGPoint

         NSSize\CGSize

         NSRect\CGRect

         */

       NSString *str = @"i love oc";// love的位置

        //        location = 2

        //        length = 3

       NSRange r1 = {2,4};

       NSRange r2 = {.location =2,.length =4};

       NSRange r3 = NSMakeRange(2,4);

       NSString *str2 = @"i love oc too";

        // 查找某个字符串在str中的范围

        //如果找不到,length = 0location = NSNotFound == -1

       NSRange range = [str rangeOfString:@"ve"];

        NSLog(@"location = %ld,length = %ld",range.location,range.length);

        //        range.location == NSUInteger == unsigned long

        NSLog(@"%ld",NSNotFound);

    }

   return 0;

}

2、NSPoint\CGPoint表示位置,点  NSPoint == CGPoint CGPoint可以跨平台,所以常用CGPoint

a、这个结构体有两个CGFloat X和CGFloat Y的成员,其实是double类型
b、常用定义方法:NSPoint p = CGPointMake(20,20);
              CGPoint p2 = NSMakePoint(10,10);

#import <Foundation/Foundation.h>

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

    @autoreleasepool {

      

       NSPoint p1= NSMakePoint(10,10);

       CGPoint p2= CGPointMake(20,20);// 最常用

       NSString *str = NSStringFromPoint(p1);

       BOOL b = CGPointEqualToPoint(p1, p2);

       NSLog(@"%d",b);        

       NSLog(@"%@",str);     

    }

   return 0;

}

3、NSSize\CGSize表示一个UI元素的尺寸NSSize == CGSize
a、这个结构体有两个CGFloat width和CGFloat height成员
b、常用定义方法:NSSize s = CGSizeMake(100,50);
              CGSize s = NSMakeSize(100,50);

#import <Foundation/Foundation.h>

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

    @autoreleasepool {    

       NSSize s1 = NSMakeSize(100, 50);

       CGSize s2 = CGSizeMake(100,50);

       NSSize s3 = CGSizeMake(200,60);

       NSString *str = NSStringFromSize(s3);

       NSLog(@"%@",str);

       BOOL b = CGSizeEqualToSize(s1, s2);

       NSLog(@"%d",b);

    }

   return 0;

}

4、NSRect\CGRect (CGPoint,CGSize) NSRect == CGRect

a、NSRect有NSPoint origin和NSSize size两个成员

#import <Foundation/Foundation.h>

// CGRect实现函数

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;

}

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

    @autoreleasepool {

       CGRect r1 = CGRectMake(0,0, 100, 50);

       /*

         struct CGRect {

            CGPoint origin;

            CGSize size;

         */

        // 想要把r1内所有属性输出看看

    NSLog(@"x=%.2f, y=%f, width=%f, height=%f",r1.origin.x, r1.origin.y, r1.size.width, r1.size.height);

       //另一种方法

       NSString * str = NSStringFromRect(r1);

       NSLog(@"%@", str);

        // 创建NSRect的其他方式

       CGRect r2 = {{0,0},{100,50}};

       CGPoint p1 = CGPointMake(10,10);

       CGSize s2 = CGSizeMake(100,90);

       CGRect r3 ={p1,s2};

       /*

        CGPointZero == CGPointMake(0, 0);返回值是const常量,

        CGSizeZero;

        CGRectZero;

         */

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

        // 判断两个Rect是否相同

       BOOL b = CGRectEqualToRect(r1, r2);

       NSLog(@"%d",b);

        //下面的高级功能属于CoreGrapgics框架,以CG开头的功能基本都在这里

        // 判断Rect是否包含Point

       BOOL b2 = CGRectContainsPoint(r4, p1);

       /*

          point表示rect左上角的点,因为左上角是坐标原点,向右和向下增加

         */

       NSLog(@"%d",b2);                      

    }

   return 0;

}

二、 常用类 – NSString

1、NSString : 不可变字符串

#import <Foundation/Foundation.h>

/*

 NSString:不可变字符串

 NSMutableString:可变字符串,是NSString的子类

 */


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

    @autoreleasepool {

        //1、字符串的创建

        NSString *s1 = @"321321321";

        

//        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 * c = [s4 UTF8String];

        

        // 从文件中读取字符串,传入绝对路径, // NSUTF8StringEncoding用到中文就可以用这种编码

        NSString *s5 = [[NSString alloc]initWithContentsOfFile:@"/Users/lanwendong/Desktop/黑马程序员_IOS开发零基础教程源代码和PPT/课程代码/代码/0724/代码/02-第二个C语言程序.c"encoding:NSUTF8StringEncoding error:nil];

        NSLog(@"%@",s5);

        

        // URL : 资源路径

        // 协议头://路径

        // 网络资源http://weibo.com/a.png

        // 本地文件file://

        // ftp服务器上ftp://

        

        // NSURL *url = [[NSURL alloc] initWithString:@"file:///Users/lanwendong/Desktop/黑马程序员_IOS开发零基础教程源代码和PPT/课程代码/代码/0724/代码/02-第二个C语言程序.c;

        // 利用类方法创建url

        NSURL *url = [NSURL fileURLWithPath:@"/Users/lanwendong/Desktop/黑马程序员_IOS开发零基础教程源代码和PPT/课程代码/代码/0724/代码/02-第二个C语言程序.c"];

        

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

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


        // 利用类方法创建(一般都会有一个类方法跟对象方法配对)

//        [NSString stringWithFormat:@""];

//        

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

//        

//        [NSURL URLWithString:<#(NSString *)#>];

        

        

        // 将字符串写入文件:写YES写入失败文件不会创建新文件

        [@"jack\njack" writeToFile:@"/Users/lanwendong/Desktop/黑马程序员_IOS开发零基础教程源代码和PPT/课程代码/代码/0724/代码/02-第二个C语言程序.c" atomically: YES encoding:NSUTF8StringEncoding error:nil];

        

        NSString *str = @"12312321";

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

    }

    return 0;

}

2、 NSMutableString : 可变字符串

#import <Foundation/Foundation.h>


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

    @autoreleasepool {

        NSMutableString  *s1 = [NSMutableString stringWithFormat:@"age is %d",10];

        

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

        

        // 拼接内容到s1的后面

        [s1 appendString:@"11 12"];// 无返回值

        // 获取“is”的范围

        NSRange range = [s1 rangeOfString:@"is"];

        // 删除指定范围内的字符

        [s1 deleteCharactersInRange:range];

        

        //这个方法会拿到s2的字符串拷贝一份,进行拼接,赋值给s3形成新的字符串,原来的不便

        NSString *s3 = [s2 stringByAppendingString:@"11 12"];// 有返回值

    }

    return 0;

}

两者的主要区别是后者可被改变,前者不可被改变,就算调用了stringByAppendingString:@"11 12"也只是创建一个新的不可变字符串


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值