·您现在的位置: 云翼网络 >> 文章中心 >> 网站建设 >> app软件开发 >> IOS开发 >> Objective-C知识总结(1)

Objective-C知识总结(1)

作者:佚名      IOS开发编辑:admin      更新时间:2022-07-23

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] 做了三件事情

  1. 申请内存空间

  2. 给实例变量初始化

  3. 返回空间的首地址

小问题:申请的空间在内存的哪个区?

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个字节