网站开发需要的准备,云浮网站建设,化工课设代做网站,类豆瓣的模板wordpressimport 指令(将文件的内容在预编译的时候拷贝到写指令的地方)import Foundation 框架NSLog 函数 NSLog(Hello, World!);NSString语法: NSString *str jack;字符串占位符: %数据类型C 语言支持的数据类型基本数据类型int double float char构造类型数组…import 指令(将文件的内容在预编译的时候拷贝到写指令的地方)import Foundation 框架NSLog 函数 NSLog(Hello, World!);NSString语法: NSString *str jack;字符串占位符: %数据类型C 语言支持的数据类型基本数据类型int double float char构造类型数组 结构体 枚举指针类型int *p1空类型voidtypedef 自定义类型BOOl 类型 YES/NOBoolean 类型 true/falseclass 类id 类型 万能指针nil 与 NULL 差不多SEL 方法选择器block 代码段类类的定义语法声明:inteface 类名 : NSObject{}inteface Person : NSObject{NSString *_name;int _age;float _height;}- (void)run;- (void)run : (参数类型)形参名称;- (void)run : (参数类型1)形参名称1 : (参数类型2)形参名称2;- (void)eat : (NSString *)foodName;- (void)sum : (int)num1 : (int)num2;end实现:implementation 类名end实现:implementation Person- (void)run{NSLog(这是一个方法);}- (void)eat: (NSString *)foodName{NSLog(这是一个方法的参数%, foodName);}- (int)sum : (int)num1 : (int)num2 {int sum num1 num2;NSLog(num1和num2的和是%d, sum);return sum;}end实例化Person *p1 [Person new];调用实例方法[p1 run];[p1 eat : 红烧排骨];[p1 eat: 1: 2];方法中访问属性NULL和nil的区别NULL一般用于指针不指向内存内存中的任何一块空间nil一般用于类指针不指向任何对象类的封装settergetter对象和对象之间的关系(组合/依赖/关联/继承)static关键字C语言中的static关键字a.修饰局部变量b.修饰全局变量c.修饰函数OC中的static关键字a. static不能修饰属性, 也不能修饰方法b. static可以修饰方法中的局部变量如果方法的返回值是当前类的对象, 那么这个方法的返回值写instancetypeself关键字获取类在代码段中的地址的方式a. 调试查看对象的isa指针的值b. 在类方法中查看self的值c. 调用对象的对象方法class, 就会返回这个对象所属的类在代码中的地址 [person1 class]d. 调用类的class方法 [Person class]类的继承语法(继承所有属性和方法, 包括静态方法和静态属性和类方法):inteface Chinese : Person {}endimplementation Chinese {}endsuper关键字访问修饰符(默认是protected)private(只能在对象方法中访问, 子类对象方法无法访问, 无法通过对象访问)示例inteface Chinese : NSObject {privateNSString *_name Felix;}endimplementation Chinese {}endprotected(只能在本类和子类的对象方法中访问, 无法通过对象访问)package(只能在当前框架中访问, 了解)publick(可以在任何地方访问)修饰符只能修饰属性, 不能修饰方法;私有属性将属性写在implementation中私有方法只写实现, 不写声明子类方式的重写子类在实现的时候重写即可description方法(每个类都有一个description方法, 该方法打印的是对象的地址, 可以重写它来适应自己的需求)sel对象点语法(就是调用调用对象的setter或者getter方法)property自动生成setter、getter方法的声明(定义还是要自己写);inteface Person : NSObject {NSString *_name;int _age;}- (void) setName: (NSString *) name;- (NSString *) name;property int age;// 生成age的setter和getter的声明// 也就是 - (void) setName: (NSString *) name;// - (NSString *) name;endsynthesize自动生成getter/setter方法的实现语法synthesize property名称;示例:inteface Person : NSObject {NSString *_name;int _age;}property int age;endimplementation Personsynthesizeendproperty 增强inteface Person : NSObjectproperty NSString *name;end1) 生成一个私有属性, 类型为NSString, 属性名为_name2) 生成getter/setter声明3) 生成getter/setter实现静态类型和动态类型静态类型: 一个指针指向的对象是一个本类对象;动态类型: 一个指针指向的对象不是一个本类对象;id指针 -- 万能指针类型, 可以指向任意OC对象id id1 [Person new];instancetype 代表方法的返回值是当前这个类的对象语法 (instancetype)person {return [self person];}动态类型检测intanceResonseToSelector 判断一个类中是否有某个方法resonseToSelector 判断一个对象中是否有某个方法Person *p1 [Person new];BOOL res [p1 resonseToSelector:selector(sayHi)];isKindOfClass方法(对象方法) 判断指定对象是否为指定类的对象或者子类对象[s1 isKindOfClass: [Person class]]isMemberOfClass方法(对象方法) 判断指定对象是否为指定类的对象, 不包括子类[s1 isMemberOfClass: [Person class]]isSubClassOfClass方法(类范发给) 判断指定对象是否为指定类的子类的对象构造方法重写init方法的规范1) 必须要先调用父类的init方法, 然后将方法的返回值赋值给slef2) 调用init方法初始化对象有可能失败, 如果初始化失败, 返回的就是nil3) 判断父类是否初始化成功, 如果初始化成功, 就初始化当前对象的属性4) 最后, 返回self的值implementation Person- (instancetype)init {self [super init];if (self ! nil) {}return slef;}end带参数的init方法1) init规范2) 必须以initWith开头3) 返回值必须是instancetype声明inteface Person- (instancetype)initWithName:(NSString *)name andAge:(int)age;end实现implementation Person- (instancetype)initWithName:(NSString *)name andAge:(int)age {self [super init];if (self ! nil) {self.name name;self.age age;}return slef;}end调用Person *felix [[Person alloc] initWithName: 小花 andAge : 18]内存管理栈区: 局部变量, 当局部变量的作用域被执行完毕之后, 这个局部变量就会被系统立即回收堆区OC对象, C函数申请的动态空间BSS段: 未初始化的全局变量, 静态变量, 一旦初始化以后就会被回收, 并转存到数据段之中数据段: 已经初始化的全局变量, 静态变量, 直到程序结束的时候才会被回收代码段: 代码, 程序结束的时候系统会被自动回收存储在代码段中的数据引用计数器1) 每一个对象都有一个属性: retainCount, 叫做引用计数器, 类型是unsigned long, 占据8个字节;引用计数器的作用, 用来记录当前这个对象有多少个人在用内存管理的分类MRC: Manual Reference Counting 手动引用计数, 手动没存管理ARC: Automatic Reference Counting 自动引用计数, 自动内存管理重写dealloc的规范必要要调用父类的dealloc方法, 并且调用父类dealloc的方法必须放在dealloc方法的最后;property参数property的四组参数(参数顺序可以随意, 但是一般按照如下顺序写)a. 与多线程相关的两个参数atomic(多线程安全锁: 安全、效率低下)nonatomic(不加多线程安全锁: 不安全、效率高)b. 与生成的setter方法的实现相关的参数assign: 默认值, 生成的setter方法直接赋值retain: 生成的setter方法就是标准的MRC的内存管理, 也就是先判断是否为同一个对象, 如果是release旧的, retain新的当属性类型是OC对象类型的时候, 那么就用retain, 否则用assign注意: 要手动写重写dealloc方法c. 与生成只读、读写相关的参数readonly: 只读, 只会生成getter, 不会生成setterreadwrite: 默认值, 同时生成getter和setterd. 与生成的getter setter方法名字相关的参数getter、setterproperty(nonatomic, assign, getter methodName) age;property(nonatomic, assign, setter methodName:) age;e. stong、weak 代表指针类型为强类型还是弱类型(默认是强类型)# 自动释放池创建自动释放池autoreleasepool{Person *p1 [[[Person alloc] init] autorelease];}分类注意事项:1) 分类中只能写方法, 不能写属性;2) 在分类中使用property, 只会自动生成声明, 不能自动生成实现, 也不会自动生成私有属性;3) 在分类中不能直接访问真私有属性(定义在implementation之中), 但是可以通过getter和setter访问4) 当分类中有和本类同名的方法的时候, 优先调用分类的方法, 哪怕没有引入分类头文件, 如果多个分类中有相同的方法, 优先调用最后编译的分类的;延展1) 延展是一个特殊的分类2) 延展这个分类没有名字3) 只有声明, 没有实现, 和本类共享一个实现4) 分类中只能新增方法, 延展中任意成员都可以写5) 分类中写property, 只会生成getter setter的声明延展中写property, 会自动生成私有属性, 也会自动生成getter和setter的声明和实现语法:inteface 本类名 ()- (void)run;- (void)sleep;end没有实现, 在本类中实现应用:为类生成一个私有的property延展一般情况下不会独占一个文件, 都是将延展直接写在本类的实现文件中?OC在C的基础之上新增了一些数据类型BOOLBooleanclassnilSELid(万能指针)blockblock变量声明:必须要指定block变量存储的代码是否有参数, 是否有返回值示例:返回值类型 (^block变量的名称)(参数列表);void (^myBlock1)(); 表示声明了一个block类型的变量叫做myBlock1 这个变量只能储存没有返回值没有参数的代码段int (^myBlock2)(int num1, int num2);初始化:代码段的书写格式:^返回值列表(参数列表) {代码段;}^void () {NSLog(its a);NSLog(its b);}myBlock1 ^void () {NSLog(its a);NSLog(its b);}执行:myBlock1();使用typedef将复杂的block定义简化typedef void (^NewType)();NewType block1;NewType block2;typedef int (^NewType)(int num1, int num2);block访问外部变量1)在block代码块的内部可以取定义在外部的变量的值, 定义在外部的局部变量和外部变量2) 在block代码块的内部可以修改全局变量的值, 但是不能修改定义在外部的局部变量的值3) 如果想要修改定义在block外部的局部变量的值, 需要在局部变量前面加上__block修饰符, 例如__block int num 300;protocol协议(声明一大堆方法, 然后类去遵守)语法: inteface Person : NSObject required(默认值)、optional(不实现, 都不会报错, required会报警告⚠️, 但是optional不会)协议之间的继承语法:protocol 协议名称 end限制协议1) NSObject *指针名 [Student new];id id [Student new];如果Student队形没有遵守StudentProtocol协议就会报警告2) 声明一个指针变量, 要求这个指针指向的对象必须遵守多个协议NSObject *stu;3) 声明一个指定类型的遵守了协议的学生对象Student *stu;Foundation框架字符串常用方法a. stringWithFormat 字符串拼接[NSString stringWithFormat: 大家好, 我叫%, 我今年%d岁, str, age]b. lenth 方法, 字符串长度NSUInteger len str.length;c. characterAtIndexUnichar ch [str characterAtIndex: 2];d. isEqualToString 判断两个字符是否相同e. rangeOfString 搜索某个字符第一次出现的下标(indexOf)NSRange range [str rangeOfString];NSRange是一个NSRange类型的结构体变量typedef struct _NSRange {NSUInteger location; 代表子串字主串出现的下标(没有就是unsigned long的最大值)NSUInteger length; 代表子串创在主创中匹配的长度(没有就是0)} NSRange;f. subStringFromIndex 字符创截取[str subStringFromIndex: 3]; // 从第三个开始截取, 截取到最后[str subStringToIndex: 3]; // 从第0个开始截取, 截取指定个数[str subStringWithRange: NSMakeRange(2, 3)]; // 从指定位置开始截取, 截取指定个数g. stringByReplacingOccurrencesOfString 字符串的替换(相当于replace方法)NSString *email wasd#qq.com; // 替换“#”号email [email stringByReplacingOccurrencesOfString: #, ];h. NSString *str 1 字符串转其他类型int num str.intValue;int num str.intValue;NSInteger num str.integerValue;double num str.doubleValue;float num str.floatValue;long long num str.longLongValue;bool num str.boolValue;i. stringByTrimmingCharactersInSet 去掉字符串前后空格[str stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceCharacterSet]];j. uppercaseString 字符串转大写[str uppercaseString];k. lowercaseString 字符串转小写[str lowercaseString];创建NSRange变量的方法1. NSRange range;range.location 3;range.length 4;2. NSRange range { 3, 7 };3. NSRange range { .location 3, .length 7 };4. NSRange range NSMakeRange(3, 7);NSMutableStringNSMutableString *str [NSMutableString string];[str appendString:jack];[str appendString:rose]; // 追加[str appendFormat:我今年%ds岁了, age]; // 以拼接的方式追加NSArray特点:a. 只能存储OC对象, 任意的OC对象b. 长度固定, 一旦NSArray数组创建完毕之后, 元素的长度固定, 无法新增, 也无法删除c. 每个元素都是紧密相连的, 每一个元素仍然有自己的下标d. 元素的类型是id类型(万能指针)创建方式:NSArray *arr [NSArray arrayWithObejcts: rose, jack, lilei, hanmeimei, nil];简写方式:NSArray *arr [rose, jack, lilei, hanmeimei, ]NSArray常用属性和方法;NSArray *arr [jack, rose, lilei];1. 获取数组长度:NSInteger count arr.count;2. 获取指定下标的元素[arr objectAtIndex: 3];3. 判断是否包含指定的元素[arr containsObject: lili];4. 获取首个, 结尾的元素arr.firstObject;arr.lastObject;5. 查找元素在数组中第一次出现的下标(没有找到就返回NSUInteger的最大值)NSUInteger index [arr indexOfObject: rose];for-in 循环遍历元素语法for(NSString *str in arr) {NSLog(%, str);}使用block遍历 enumerateObjectsUsingBlock数组转NSString(js的join方法)NSArray *arr [jack, rose, jim];NSString *str [arr componentsJoinedByString: -];NSString转数组NSString 柳州市, 城中区, 地王财富中心;NSArray *arr [str componentsSeparatedByString: ,];NSMutableArray(支持动态新增删除功能)创建:1. NSMutableArray *arr4 [NSMutableArray new];2. NSMutableArray *arr4 [[NSMutableArray alloc] init];3. NSMutableArray *arr4 [NSMutableArray array];4.NSMutableArray *arr4 [NSmutableArray arrayWithObjects: jack, rose, lili, nul];1.新增元素:NSMutableArray *arr4 [NSMutableArray new];[arr4 addObject: jack];2.新增数组:NSObject arr [“jack”, rose, lucy, tom];NSMutableArray *arr [NSMutableArray new];[arr addObjectFromArray: arr];3.指定下标处插入元素;NSMutableArray *arr [NSmutableArray arrayWithObjects: jack, rose, lili, nul];[arr insertObject: lilei atIndex: 1];4.删除指定下标的元素:[arr removeObjectAtIndex: 1];5.删除所有指定的元素:[arr removeObject: lili];6.删除最后一个元素:[arr removeLastObject];7.删除所有元素:[arr removeAllObjects];NSNumberNSNumber *number1 [NSNumber numberWithInt: 10];NSNumber *number2 [NSNumber numberWithInt: 20];NSNumber *number3 [NSNumber numberWithInt: 30];NSNumber *number4 [NSNumber numberWithInt: 40];NSArray *arr [number1, number2, number3, number4]遍历:for (NSNumber *num in arr) {NSLog(%D, num.intValue);}简写:NSNumber *number1 10;int num 10;NSNumber *n1 (num);NSDictionary创建方式:NSDictionary *dict [NSDictionary dictionaryWithObjectsAndkeys:jack, name, 18, age, nil];简写:NSDictionary *dict {name: rose, age: 18};打印:NSLog(%, dict);取值:dict[name];dict.count;[dict obejctForKeys: age];遍历:for (id key in dict) {NSLog(% %, key, dict[key]);}使用block遍历 enumerateKeysAndObjectsUsingBlockNSMutableDictionary新增key:NSMutableDictionary *dict [NSMutableDictionary dictionaryWithObjectsAndkeys: jack, name, 18,age, nil];[dict setObject:广州市xx街道, forKey: address];删除所有的键值对removeAllObjects删除指定的键值对removeObjectForKey[dict removeObjectForKey: age];NSFileManager创建NSFileManager *manager [NSFileManager defaultManage];1. fileExistsAtPath 判断指定路径下的文件是否存在NSString *path /Users/Apple/deastop/cc.mp3;BOOL res [manager fileExistsAtPath: path]暂停程序sleep[NSThread sleepForTimeInterval: 10];CGPoint声明:1. CGPoint p1;p1.x 20;p1.y 30;2. CGPoint p1 {20, 30};3. CGPoint p1 {.x 20, .y 30};4. CGPiont p1 CGPointMaker(20, 30);CGSize声明:1. CGSize size;size.x 20;size.y 30;2. CGSize size {20, 30};3. CGSize size {.x 20, .y 30};4. CGPiont size CGSizeMaker(20, 30);CGRectCGRect rect;rect.origin.x 20;rect.origin.y 30;rect.size.width 100;rect.size.height 200;NSValue用来包装结构体, 类似于NSNumber;字符串和时间相互转换1. 获取当前系统时间NSDate *date [NSDate new];NSLog(%, date);2. 时间转字符串NSDateForMatter *formatter [NSDateFormatter new];formatter.dateFormatter yyyy-MM-DD HH:mm:ss;NSString *str [formatter stringFromDate: date];3. 字符串转NSDate对象NSString *strDate “2021年12月12号 12点12分12秒”;NSDateForMatter *formatter [NSDateFormatter new];formatter.dateFormatter yyyy年MM月DD号 HH点mm分ss秒;NSDate *date [formatter dateFromString: strDate];时间计算NSCalendar获取时间对象的各个部分单例模式