您的位置:首页 > 移动开发 > Objective-C

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

2014-11-04 19:07 246 查看
------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 = 0,location = 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"也只是创建一个新的不可变字符串
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  OC学习笔记