IOS开发学习笔记009-OC基本知识

开始学习OC,时间不等人啊,要抓紧了。

OC基本知识

新建一个以.m结尾的文件,这既是oc的程序文件。在oc程序中完全兼容C语言。编译好链接类似。

oc包含头文件是使用#import <>

import 和include 的区别:

  1:import和include一样的包含功能

  2:import可以自动防止文件被重复拷贝

1 #import <Foundation/NSObjCRuntime.h>//NSLog头文件

2 //import 1:和include一样

3 //       2:可以自动防止文件被重复拷贝

4 int main()

5 {

6     NSLog(@"this is OC output");//自动换行

7     return  0;

8 }

如果使用Foundation框架,则编译的时候需要添加参数 cc -c -framework Foundation a.m

每个框架都有自己的主头文件,和框架名一样,包含所有头文件。

如果有多个文件,编译顺序和c语言一样: cc -c one.m two.m -framework Foundation

BOOL类型(OC特有的)

  定义:typedef signed char BOOL;

  两种取值:

  #define YES (BOOL) 1

  #define NO (BOOL) 0

 1 #import <Foundation/Foundation.h>

 2 

 3 int main()

 4 {

 5     BOOL b = YES;//1

 6     BOOL b2 = NO;//0

 7     

 8     NSLog(@"%d\t%d",b,b2);//1    0

 9     return 0;

10 }

 

面向对象

万物皆对象。

常用术语

  面向过程 Procedure Oriented

  面向对象 Object Oriented,简称OO

  面向对象编程 Object Oriented Programming,简称OOP

类和对象的区别

  类是对象的抽象。

  对象是类的实例。

类的构成:

   1、类名

      首字母大写,不能下划线,多个单词每个首字母大写

   2、属性

   3、行为(功能)

类的实现

 

 1 /*

 2  3  1、类名

 4     首字母大写,不能下划线,多个单词每个首字母大写

 5  2、属性

 6  3、行为(功能)

 7 */

 8 

 9 #import <Foundation/Foundation.h>//NSObject

10 

11 //1、类的声明:属性和行为

12 @interface Car : NSObject//继承NSObject,使类具有创建对象的功能

13 {

14     //属性,也就是成员变量(实例变量),默认会初始化为0,默认是保护属性

15     @public

16     int wheels;//轮胎个数

17     int speed;//时速

18 }

19 

20 //方法(行为):返回值,方法名,参数

21 //只要是oc对象的方法,必须以‘-’开头

22 //OC方法中任何数据类型都必须用"()"括起来

23 //OC方法中小括号就是用来括住数据类型

24 - (void) run;

25 

26 @end

27 

28 

29 

30 

31 //2、类的实现,用力实现@interface中声明的方法

32 @implementation Car

33 //方法的实现

34 - (void) run

35 {

36     NSLog(@"Running!");

37 }

38 @end

39 

40 int main()

41 {

42     //创建对象,返回对象的地址

43     Car *p = [Car new];//OC中执行任何行为都需要这个 [行为执行者 行为];

44     p->wheels = 4;//赋值

45     p->speed = 60;//赋值

46     

47     [p run];//调用方法

48     

49     NSLog(@"speed is %d!",p->speed);//输出速度

50 

51     return 0;

52 }

 

在类创建对象之前会把类加载到内存中,每个对象还都有一个ISA 指针,指向这个类。

 

对象和函数的区别

  • OC方法只能声明在@interface和@end之间,只能实现在@implementation和@end之间。也就是说OC方法不能独立于类存在
  • C函数不属于类,跟类没有联系,C函数只归定义函数的文件所有
  • C函数不能访问OC对象的成员
  • 低级错误:方法有声明,但是实现的时候写成了函数
 1 #import <Foundation/Foundation.h>

 2 

 3 

 4 //1、类的声明

 5 @interface Person: NSObject

 6 {

 7     @public

 8     int age;//年龄

 9     double weight;//体重

10 }

11 

12 

13 - (void)walk;//行走

14 

15 @end

16 

17 //函数1

18 void test(int age,int wei)

19 {

20     age = 20;

21     wei = 200;

22 }

23 //函数2

24 void test1(Person *p)

25 {

26     p->age = 20;

27     p->weight = 200;

28 }

29 

30 //2、类的实现

31 @implementation Person

32 //实现@interface中声明的方法

33 - (void)walk//行走方法的实现

34 {

35     NSLog(@"The person whoes age is %d and weight is %f is walking !",age,weight);

36 }

37 

38 @end

39 

40 int main()

41 {   

42     Person *p1 = [Person new];//新建一个对象

43     p1->age = 25;//年龄赋值

44     p1->weight = 66.7;//体重赋值

45     [p1 walk];//walk方法调用

46     

47     Person *p2 = [Person new];//新建一个对象

48     p2->age = 45;//年龄赋值

49     p2->weight = 77.0;//体重赋值

50     [p2 walk];//walk方法调用

51     

52     //p2 = p1;//对象间赋值

53     

54     //对象和函数

55     test(p1->age,p1->weight);//值传递,不改变原值

56     [p1 walk];//walk方法调用

57     test1(p1);//传地址,改变原值

58     [p1 walk];//walk方法调用

59 

60     return 0;

61 }

@interface 和@implementation分工

IOS开发学习笔记009-OC基本知识

 

@interface 就相当于钟表表面

@implementation就是钟表内部的-实现

常见错误

  1、只有类的声明,没有类的实现

  2、漏了@end

  3、@interface和@implementation嵌套

  4、两个类的声明嵌套

  5、成员变量没有写在括号里面

  6、方法的声明写在了大括号里面

 

 

方法和函数的区别

 方法:

 1、方法都是以减号开头的

 2、方法声明必须写在@interface和@end之间

      方法定义必须写在@implementation和@end之间

 3、方法只能由对象来调用

 4、方法归对象/类所有

 函数:

 1、函数归文件所有,能写在除#interface和@end之间的任意位置

 2、函数调用不依赖与对象

 

类的简单设计

 

  1 #import <Foundation/Foundation.h>

  2 /*

  3  学生类:

  4  狗类

  5  */

  6 

  7 

  8 //性别

  9 typedef enum

 10 {

 11     SexMan,//男

 12     SexWoman//女

 13 } Sex;

 14 //生日

 15 typedef struct

 16 {

 17     int year;//年

 18     int month;//月

 19     int day;//日

 20 } Date;

 21 //颜色

 22 typedef enum

 23 {

 24     ColorBlack,//黑色

 25     ColorRed,//红色

 26     ColorGreen//绿色

 27 } Color;

 28 

 29 //类的声明:狗

 30 @interface Dog : NSObject

 31 {

 32     @public

 33     double weight;//体重

 34     Color curColor;//毛色

 35 }

 36 //方法声明

 37 - (void) eat;//吃

 38 - (void) run;//走

 39 

 40 @end

 41 

 42 

 43 @implementation Dog

 44 

 45 //方法实现

 46 - (void) eat

 47 {

 48     weight += 1;

 49     NSLog(@"狗吃过体重是%f",weight);

 50 }

 51 

 52 - (void) run

 53 {

 54     weight -= 1;

 55     NSLog(@"狗溜过体重是%f",weight);

 56 }

 57 

 58 

 59 @end

 60 

 61 

 62 

 63 //类的声明 :学生

 64 @interface Student : NSObject

 65 {

 66     @public

 67     Sex sex;//性别

 68     Date birthday;//生日

 69     double weight;//体重

 70     Color FavColor;//最喜欢的颜色

 71     char *name;//姓名

 72     //狗,对象中对象,指针

 73     Dog *dog;//OC中得其他对象必须是指针

 74 }

 75 //方法声明

 76 - (void) eat;//吃

 77 - (void) run;//走

 78 - (void) print;//输出

 79 - (void) walkingDog;//遛狗

 80 - (void) feadDog;//喂狗

 81 @end

 82 

 83 //类的实现

 84 @implementation Student

 85 //方法实现

 86 - (void) eat

 87 {

 88     weight += 1;

 89     NSLog(@"吃过体重是%f",weight);

 90 }

 91 

 92 - (void) run

 93 {

 94     weight -= 1;

 95     NSLog(@"运动过体重是%f",weight);

 96 }

 97 

 98 - (void) print

 99 {

100     NSLog(@"Sex is %d,birthday is %d-%d-%d,favourate color is %d",sex,birthday.year,birthday.month,birthday.day,FavColor);

101 

102 }

103 

104 

105 - (void) walkingDog

106 {

107     [dog run];

108 }

109 - (void) feadDog

110 {

111     [dog eat];

112 }

113 @end

114 

115 

116 

117 int main()

118 {

119     Student *pStu = [Student new];//新建对象

120     pStu->dog = [Dog new];//新建狗对象

121     pStu->dog->weight = 20;//狗的体重

122     pStu->dog->curColor = ColorBlack;//狗的颜色

123     pStu->weight = 50;//学生体重

124     

125     pStu->sex = SexMan;//学生性别

126     

127     Date d = {1990,3,5};//学生年龄

128     pStu->birthday = d;//赋值

129     

130     pStu->FavColor = ColorGreen;//学生最喜欢的颜色

131     

132     pStu->name = "ZhangSan";//学生姓名

133     

134     [pStu eat];//调用方法eat

135     [pStu eat];//调用方法eat

136     [pStu run];//调用方法run

137     

138     [pStu print];//调用方法print

139     [pStu walkingDog];//调用方法

140     [pStu feadDog];//调用方法feadDog

141     return 0;

142 }

 

方法的参数

oc方法中,一个参数对应一个冒号。

- (int) pingfang:(int)num;//oc方法中,一个参数对应一个冒号. 方法名是pingfang: 包括后面的冒号。

- (int) SumwithNum1:(int)num1 andNum2:(int)num2;//冒号前可以加描述,用于理解参数。方法名是:SumwithNum1:andNum2:

 

 1 #import <Foundation/Foundation.h>

 2 

 3 /*

 4  计算器类:

 5  返回数值n

 6  计算平方

 7  计算和

 8  */

 9 

10 @interface JiSuanQi : NSObject

11 

12 -(double) pi;

13 //方法名是 pingfang:

14 - (int) pingfang:(int)num;//oc方法中,一个参数对应一个冒号

15 //- (int) Sum:(int)a :(int)b;

16 //方法名是:SumwithNum1:andNum2:

17 - (int) SumwithNum1:(int)num1 andNum2:(int)num2;//冒号前可以加描述,用于理解参数

18 @end

19 

20 

21 @implementation JiSuanQi

22 - (double) pi

23 {

24     return 3.14;

25 }

26 - (int) pingfang:(int)num//oc方法中,一个参数对应一个冒号

27 {

28     return num * num;

29 }

30 - (int) SumwithNum1:(int)num1 andNum2:(int)num2

31 {

32     return num1 + num2;

33 }

34 @end

35 

36 

37 int main()

38 {

39     JiSuanQi *p = [JiSuanQi new];//新建对象

40     double d= [p pi];//调用pi方法

41     NSLog(@"%f",d);

42     int n = [p pingfang:10];//调用平方方法

43     NSLog(@"%d",n);

44     //这样写比较好理解

45     int sum = [p SumwithNum1:10 andNum2:20];//调用方法sum

46     NSLog(@"%d",sum);

47     return 0;

48 }

练习2:

 1 /*

 2  3     方法:比较车速

 4  */

 5 

 6 //

 7 @interface Car : NSObject

 8 {

 9 @public

10     int speed;

11 }

12 - (int) comapreSpeedWithOther:(Car *)other;

13 

14 @end

15 

16 @implementation Car

17 - (int) comapreSpeedWithOther:(Car *)other

18 {

19     return speed - other->speed;

20 }

21 

22 @end

23 

24 int main()

25 {

26     Car *p1 = [Car new];

27     Car *p2 = [Car new];

28     p1->speed = 200;

29     p2->speed = 300;

30     int res = [p1 comapreSpeedWithOther:p2];

31     NSLog(@"%d",res);

32     return 0;

33 }
View Code

 

匿名对象的使用

[Car new]->speed = 300;//匿名对象

 

int main()

{

    //匿名对象,不要这样写,会造成内存泄露

    [Car new]->speed = 300;

    //不要这样写,会造成内存泄露

    [[Car new] run];

    return 0;

}

 

Xcode文档安装

1、直接找到Xcode文件路径,把离线文件复制进去

  /Applications/Xcode.app/Contents/Developer/Documentation/DocSets

2、放到硬盘某路径下

  /Users/用户名/Library/Developer/Shared/Documentation/DocSets

 

你可能感兴趣的:(ios开发)