09 2013 档案
摘要:// 计算文件的代码行数/* path : 文件的全路径(可能是文件夹、也可能是文件) 返回值 int :代码行数 */NSUInteger codeLineCount(NSString *path){ // 1.获得文件管理者 NSFileManager *mgr = [NSF...
阅读全文
摘要:// NSNumber之所以能包装基本数据类型为对象,是因为继承了NSValue // 结构体--->OC对象 CGPoint p = CGPointMake(10, 10); // 将结构体转为Value对象 NSValue *value = [NSValue valueWithPoint:p]; // 将value转为对应的结构体 [value pointValue]; NSArray *array = @[value ];
阅读全文
摘要:// 创建一个时间对象 NSDate *date = [NSDate date]; // 打印出的时候是0时区的时间(北京-东8区) NSLog(@"%@", date); // 在date时间的基础上往后推 5 秒。 NSDate *date2 = [NSDate dateWithTimeInterval:5 sinceDate:date]; NSLog(@"%@",date2); // 从1970开始走过的秒数 NSTimeInterval seconds = [date2 timeIntervalSi...
阅读全文
摘要:NSNumber *num = [NSNumber numberWithInt:10]; NSDictionary *dict = @{ @"name" : @"jack", @"age" : num }; NSNumber *num2 = dict[@"age"]; int a = [num2 intValue]; NSLog(@"%d" , a); //10// @20 将 20包装成一个NSNumber对像 NSArray *array = @[ @{@"name" :
阅读全文
摘要:/* 集合 1.NSArray\NSMutableArray //ArrayList * 有序 * 快速创建(不可变):@[obj1, obj2, obj3] * 快速访问元素:数组名[i] 2.NSSet\NSMutableSet //Set * 无序 * 不可以快速创建 3.NSDictionary\NSMutableDictionary //Map * 无序 * 快速创建(不可变):@{key1 : value1, key2 : value2} * 快速访问元素:字典名[key] */ /* 字典: key ----> value ...
阅读全文
摘要:/* * NSSet和NSArray的对比 * 1> 共同点 * 都是集合,都能存放多个OC对象 * 只能存放OC对象,不能存放非OC对象类型(基本数据类型:int、char、float等,结构体,枚举) * 本身都不可变,都有一个可变的子类 * * 2> 不同点 * NSArray有顺序,NSSet没有顺序 */ NSSet *s = [NSSet set]; NSSet *s2 = [NSSet setWithObjects:@"jack",@"rose", @"jack2",@"jack3",ni
阅读全文
摘要:/* * NSArray :不可变数组 * NSMutableArray : 可变数组 *//* *生成数组,添加与删除元素。 */void mutableArray(){ NSMutableArray *array = [NSMutableArray arrayWithObjects:@"jim", nil]; // 每添加一个新元素到数组中,都会对这个元素做一次retain操作 // 每删除一个元素,都会对这个元素做一次release // 当数组被销毁的时候,数组中的所有元素都会做一次release [array addObject:@"...
阅读全文
摘要:/* * 字符串的替换和插入 */void stringReplace(){ NSMutableString *str = [NSMutableString stringWithFormat:@"/users/mj/abc.txt"]; NSRange range = [str rangeOfString:@"abc"]; [str replaceCharactersInRange:range withString:@"cde"]; //将abc替换为cde NSUInteger location = [str rangeOfStri
阅读全文
摘要:/* *字符串写入文件: */void stringExport(){ NSString *str = @"ha"; NSString *path = @"/Users/apple/Desktop/mj.txt"; NSError *error = nil; // 如果文件夹不存在,会写入失败 // 如果文件夹存在,文件不存在,会自动创建文件 // 每次写入都会覆盖以前的内容 // atomically :YES: 原子性操作,全部内容写入成功才会产生新的内容。如果中途写入失败,就回滚操作。 // ...
阅读全文
摘要://NSRange变量:表示一个区域; // 创建NSRange的方式 NSRange r1 = {2,4}; // 不推荐 NSRange r2 = {.location = 2,.length = 4}; // 不推荐 NSRange r3 = NSMakeRange(2, 4); // 推荐使用 NSString *str1 = @"i love oc"; // 查找某个字符串在str中的范围 // 如果找不到,length=0,location=NSNotFound==-1 ...
阅读全文
摘要:一、arc的基本使用: ARC的判断准则:只要没有强指针指向对象,就会释放对象 1.ARC特点 1> 不允许调用release、retain、retainCount 2> 允许重写dealloc,但是不允许调用[super dealloc] 3> @property的参数 * strong :成员变量是强指针(适用于OC对象类型) * weak :成员变量是弱指针(适用于OC对象类型) * assign : 适用于非OC对象类型 4> 以前的retain改为用strong 指针分2种: 1> 强指针:默认情况下,所有的指针都是强指针 __str...
阅读全文
摘要:一、引用计数器的基本操作: 1.方法的基本使用 1> retain :计数器+1,会返回对象本身 2> release :计数器-1,没有返回值 3> retainCount :获取当前的计数器的值 4> dealloc // 当一个Person对象被回收的时候,就会自动调用这个方法 - (void)dealloc { NSLog(@"Person对象被回收"); // super的dealloc一定要调用,而且放在最后面 [super dealloc...
阅读全文
摘要:1.id: 万能指针id :id对象不能用点语法、id对象本身已经有 * 了 因此变量名不能有 * 。 可以吧id理解为 NSObject * 类型数据! int main() { @autoreleasepool { Person *p = [Person new]; NSObject *o = [Person new]; // 万能指针id id d = [Person new]; [d setAge:...
阅读全文
摘要:1 int main(int argc, const char * argv[]) 2 { 3 @autoreleasepool { 4 Student *stu = [[Student alloc] init]; 5 6 // 设置age的值 7 stu.age = 10; // 等价于[stu setAge:10]; 8 9 // 取出age的值 10 int age = stu.age; // 等价于int...
阅读全文
摘要:一、语法简介: 1.类: 在Java中,我们用1个.java文件就可以描述清楚一个类;在OC中,一般用2个文件来描述一个类: 1> .h:类的声明文件,用于声明成员变量、方法。类的声明使用关键字@interface和@end。 注意:.h中的方法只是做一个声明,并不对方法进行实现。 也就是说,只是说明一下方法名、方法的返回值类型、方法接收的参数类型而已,并不会编写方法内部的代码。 2> .m:类的实现文件,用于实现.h中声明的方法。类的实现使用关键字@implementation和@end。...
阅读全文
摘要:1 #import 2 3 int main(int argc, const char * argv[]) 4 { 5 6 @autoreleasepool { 7 8 // insert code here... 9 NSLog(@"Hello, World!"); 10 11 } 12 return 0; 13 } 1.程序的入口点:main函数 2.@autoreleasepool: OC是不支持垃圾回收的,需要开发人...
阅读全文
摘要:枚举:一、枚举的概念: 比如,你可以用一个枚举类型的变量来表示季节,因为季节只有4种可能的取值:春天、夏天、秋天、冬天。 二、枚举类型的定义: 一般形式为:enum 枚举名 {枚举元素1,枚举元素2,⋯⋯}; enum Season {spring, summer, autumn, winter}; 三、枚举变量的定义: 前面只是定义了枚举类型,接下来就可以利用定义好的枚举类型定义变量。 跟结构体一样,有3种方式定义枚举变量 1.先定义枚举类型,再定义枚举变量 enum Season {spring, summer, autumn, winte...
阅读全文
摘要:一、什么是结构体: 数组:内部的元素是相同类型的。 结构体:允许内部的元素是不同类型的。 二、结构体的定义: 1.定义形式: 结构体内部的元素,也就是组成成分,我们一般称为"成员"。 结构体的一般定义形式为: 1 struct 结构体名{ 2 3 类型名1 成员名1; 4 5 类型名2 成员名2; 6 7 ⋯⋯ 8 9 类型名n 成员名n; 10 11 }; struct是关键字,是结构体类型的标志。 2...
阅读全文
摘要:一、在Java中,全局变量的定义没有严格的位置规定: 二、在C语言中,全局变量定义的位置是有限制的: 默认情况下,一个函数不可以访问在它后面定义的全局变量 第1种办法:将变量a定义在main函数的前面 第2种办法:在main函数前面对变量a进行提前声明 三、重复定义同一个变量: 重复定义同一个变量a代表着同一个变量。 四、不同源文件中的同名变量: 假如在另一个源文件中也有全局变量int a;,那么这两个源文件的所有全局变量int a;都代表着同一个变量。 五、static关键字: 但很多时候,我们并不想让源文件中的全局变量跟其他源文件共享,相当于...
阅读全文
摘要:一、extern与函数:(外部函数) 如果一个程序中有多个源文件(.c),编译成功会生成对应的多个目标文件(.obj),这些目标文件还不能单独运行,因为这些目标文件之间可能会有关联,比如a.obj可能会调用c.obj中定义的一个函数。将这些相关联的目标文件链接在一起后才能生成可执行文件。 先来理解2个概念: 1.外部函数:如果在当前文件中定义的函数允许其他文件访问、调用,就称为外部函数。C语言规定,不允许有同名的外部函数。 2.内部函数:如果在当前文件中定义的函数不允许其他文件访问、调用,只能在内部使用,就称为内部函数。C语言规定不同的源文件可以有同名的内部...
阅读全文
摘要:一、变量的作用域: 1.局部变量 2.全局变量 二、变量的存储类型 * 变量的存储类型就是指变量存储在什么地方。 有3个地方可以用于存储变量:普通内存、运行时堆栈、硬件寄存器。 变量的存储类型决定了变量何时创建、何时销毁以及它的值能保持多久,也就是决定了变量的生命周期。 * C语言根据变量的存储类型的不同,可以把变量分为:自动变量、静态变量、寄存器变量。 1.自动变量: 1> 定义:自动变量是存储在堆栈中的。 2> 哪些是自动变量:被关键字auto修饰的局部变量都是自动变量,但是极少使用这个关键字,基本上是废的,...
阅读全文
摘要:一、基本概念: 其实我们早就有接触文件包含这个指令了, 就是#include,它可以将一个文件的全部内容拷贝到另一个文件中。 二、一般形式: 1.第1种形式#include :直接到C语言库函数头文件所在的目录中寻找文件 2.第2种形式 #include "文件名" :系统会先在源程序当前目录下寻找,若找不到,再到操作系统的path路径中查找,最后才到C语言库函数头文件所在目录中查找 三、使用注意: 1.#include指令允许嵌套包含,比如a.h包含b.h,b.h包含c.h,但是不允许递归包含,比如 a.h 包含 b.h,b.h 包含 a.h。 2.使用#incl...
阅读全文
摘要:条件编译的概念: 在很多情况下,我们希望程序的其中一部分代码只有在满足一定条件时才进行编译,否则不参与编译(只有参与编译的代码最终才能被执行),这就是条件编译。 一、基本用法: 1 #if 条件1 2 ...code1... 3 #elif 条件2 4 ...code2... 5 #else 6 ...code3... 7 #endif 1> 如果条件1成立,那么编译器就会把#if 与 #elif之间的code1代码编译进去(注意:是编译进去,不是执行,很平时用的if-else是不一样的) ...
阅读全文
摘要:预处理指令简介: 1.C语言在对源程序进行编译之前,会先对一些特殊的预处理指令作解释(比如之前使用的#include文件包含指令),产生一个新的源程序(这个过程称为编译预处理),之后再进行通常的编译 2.为了区分预处理指令和一般的C语句,所有预处理指令都以符号"#"开头,并且结尾不用分号 3.预处理指令可以出现在程序的任何位置,它的作用范围是从它出现的位置到文件尾。习惯上我们尽可能将预处理指令写在源程序开头,这种情况下,它的作用范围就是整个源程序文件 4.C语言提供的预处理指令主要有:宏定义、文件包含、条件编译 宏定义可以分为2种: 不带参数的宏定义 和 带参数的宏定义..
阅读全文
摘要:一、返回指针的函数: 1 // 将字符串str中的小写字母变成大写字母,并返回改变后的字符串 2 // 注意的是:这里的参数要传字符串变量,不能传字符串常量 3 char * upper(char *str) { 4 // 先保留最初的地址。因为等会str指向的位置会变来变去的。 5 char *dest = str; 6 7 // 如果还不是空字符 8 while (*str != '\0') { 9 // 如果是小写字母 10 if (*str...
阅读全文
摘要:用指针遍历字符串的所有字符: 1 // 定义一个指针p 2 char *p; 3 4 // 定义一个数组s存放字符串 5 char s[] = "mj"; 6 7 // 指针p指向字符串的首字符'm' 8 p = s; // 或者 p = &s[0]; 9 10 for (; *p != '\0'; p++) { 11 printf("%c \n", *p); 12 } 用指针直接指向字符串: 1 #include 2 3 int main() 4 { ...
阅读全文
摘要:char类型的变量要占用1字节,所以p+1代表p的值加1;float类型的变量占用4字节,所以p+1代表p的值加4。 从这一点,也可以很好地说明为什么指针一定要分类型,不同类型的指针,p+1的含义是不一样的。 1 // 定义一个int类型的数组 2 int a[4] = {1, 2, 3, 4}; 3 4 // 定义一个int类型的指针,并指向数组的第0个元素 5 int *p = a; 6 7 int i; 8 for (i = 0; i < 4; i++) { 9 // 利用指针运算符*取出数组元素的值 10 int value = *(p+i); /...
阅读全文
摘要:指针:用来存放变量地址的变量,就称为"指针变量"。 "直接引用"是直接通过变量名来读写变量。 "间接引用"首先将变量a的地址存放在另一个变量中,比如存放在变量b中,然后通过变量b来间接引用变量a,间接读写变量a的值。 1 // 定义int类型的变量a 2 int a = 10; 3 4 // 定义一个指针变量p 5 int *p; 6 7 // 将变量a的地址赋值给指针变量p,所以指针变量p指向变量a 8 p = &a; // 定义一个指针变量p // 并将变量a的地址赋值给指针变量p,所以指针变量p指向变量a int *p
阅读全文
摘要:char a[3] = {'m','j','\0'}; char a[3] = "mj"; //系统会自动在字符串尾部加上一个"\0"结束符。: putchar:字符输出函数 putchar(65); //A putchar('A'); //A int a = 65; putchar(a); //A putchar一次只能输出一个字符,而printf可以同时输出多个字符。 getchar:字符输入函数 char c; ...
阅读全文
摘要:变量存储单元的第一个字节的地址就是该变量的地址。 数组名代表着整个数组的地址,也就是数组的起始地址,也是数组第一个元素的地址。 C语言中,编译器是不会对数组下表越界进行检查的,所以自己访问数组元素时要小心。 void test(int b[]) { b[0] = 9; } int main() { int a[3]; a[0] = 10; printf("函数调用前的a[0]:%d\n",a[0]); test(a); printf("函数调用后的a[0]:%d\n",a[0]); return 0; } //...
阅读全文
摘要:逗号运算符和逗号表达式:整个逗号表达式的值是最后一个表达式的值。 int a = 2; int b = 0; int c; int d; c = (++a,a *= 2,b = a * 5); printf("c = %d",c); //输出:c = 30 d = ++a,a *= 2,b = a * 5; printf("d = %d",d); //输出:d = 3 sizeof:可以用来计算一个变量或者一个常量...
阅读全文
摘要:基本数据类型: 整型(int)、浮点型(单精度浮点型(float)、双精度浮点型(double))、字符型(char) 指针类型: void * 构造类型: 数组、结构体(strtuct)、共用体(union)、枚举(enum) 空类型: void类型修饰符: short 短型 取值范围:-32768 ~ 32767 long 长型 取值范围:-2147483648 ~ 2147483647 signed 有符号型 unsigned 无符号型以下写法都是正确的: short int s1 = 1; ...
阅读全文
摘要:一、printf函数: printf("Hello World!\n"); printf("My age is %d\n",26); int age = 17; printf("My age is %d\n",age); %d 或 %i: 带符号 十进制整数。 %o:不带符号 八进制整数。 %x:不带符号十六进制整数。 %u:不带符号 十进制整数。 %c:输出一个字符。 %s:输出一个或多个字符串。 %f:输出小数,默认输出6位小数。 %e:以标准指数形式输出单、双精度数,数...
阅读全文