Objective-C知识总结(1)
Objective-C简称OC,是一款可以开发Mac OS X平台和iOS平台应用程序的开发语言,目前最新的swift语言也可以开发以上两平台的应用。
OC是面对对象的语言(OC面对对象语言特性请看之前的博客--->也可以点我!<---),在OC代码可以混入C语言代码,甚至是C++代码,也可以和swift进行混编。
好了,简介就说这么多>_<
先来个小问题:为什么OC要使用import引入头文件,import和include的区别?
include 和 import 都是引入头文件
import引入的头文件,可以防止重复包含
include它是使用预处理指令防止重复包含,如果没有写预处理指令,则无法防止重复包含问题
还记得怎么使用预处理指令防止重复包含嘛
#ifndef Zhy #define Zhy // 函数的声明 void test(); #endif
使用NSLog输出自带换行
NSLog(@"Hello World!");
OC中相对C语言多了一个BOOL类型用来保存逻辑值,YES(真 1) NO(假 0)
OC中的异常捕捉机制
@try { // 有可能会出错的代码 <#Code that can potentially throw an exception#> } @catch (NSException *exception) { // 错误的处理方法 <#Handle an exception thrown in the @try block#> NSLog(@" %@ ",exception); // 打印出错误的信息 } @finally { // 无论是否有错都会执行 <#Code that gets executed whether or not an exception is thrown#> }
OC中类的创建以及在哪里定义成员变量,类方法和对象方法的声明和实现
// 人这个类的声明 @interface Person : NSObject { // 成员变量 NSString *_name; int _age; } // 对象方法的声明 - (void)duixiangfangfa; // 类方法的声明 + (void)leifangfa; @end // 人这个类的实现 @implementation Person // 对象方法的实现 - (void)duixiangfangfa { NSLog(@"这是对象方法的实现"); } // 类方法的实现 + (void)leifangfa { NSLog(@"这是类方法的实现"); } @end
说一下创建对象的语句
Person *p = [Person new];
[Person new] 做了三件事情
-
申请内存空间
-
给实例变量初始化
-
返回空间的首地址
小问题:申请的空间在内存的哪个区?
new 的时候申请的空间在内存的堆区(程序动态分配的内存空间)
实例变量保存在堆区,指针p保存在栈区,对象方法保存在代码区
堆区有一个_isa指针指向代码区,当对象要调用方法时,首先找p对应的堆区的空间,然后找到 _isa指针,再找到_isa指向的代码区的空间,然后到该空间中找 方法
设计一个”学生“类
1> 成员变量
* 姓名
* 生日
1 #import <Foundation/Foundation.h> 2 // 日期的结构体 3 typedef struct { 4 5 // 年 6 int year; 7 // 月 8 int month; 9 // 日 10 int day; 11 12 }MyDate; 13 14 // Student类的声明 15 @interface Student : NSObject 16 { 17 @public 18 // 学生姓名 19 NSString *_name; 20 21 // 学生生日 22 MyDate _birthday; // 结构体变量 23 } 24 25 @end 26 27 28 // Student类的实现 29 @implementation Student 30 31 @end 32 33 34 int main(int argc, const char * argv[]) { 35 @autoreleasepool { 36 37 Student *stu = [Student new]; 38 stu->_name = @"阿衰"; 39 40 //第一种方法 41 stu->_birthday =(MyDate){1983,12,12}; 42 //NSLog(@"%d,%d,%d",stu->_birthday.year,stu->_birthday.month,stu->_birthday.day); 43 44 //第二种方法:定义一个结构体变量 45 MyDate d1 = {1981,11,11}; //定义结构体变量的同时进行初始化 46 stu->_birthday = d1; 47 48 //第三种方法,逐个赋值 49 stu->_birthday.year = 2014; 50 stu->_birthday.month = 12; 51 stu->_birthday.day = 11; 52 53 NSLog(@"%d,%d,%d",stu->_birthday.year,stu->_birthday.month,stu->_birthday.day); 54 } 55 return 0; 56 }
这里主要说明的是调用结构体时的方法
NSString类的用法
NSString是OC中字符串处理的类
NSString *s = @"zzzzzzzzzzzzzz "; NSString *s1 = [NSString stringWithFormat:@"%d",i];
NSString字符串的长度
NSString *s1 = @"zzz"; NSUInteger len = [s1 length]; // 3 // 中文字符在NSString中也占1个字节