一、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 == CGSizea、这个结构体有两个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 == CGRecta、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;
}
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;
}
#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"也只是创建一个新的不可变字符串