码迷,mamicode.com
首页 > 移动开发 > 详细

iOS修炼之道:objective-c 类、对象和方法 1

时间:2015-12-06 19:06:41      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:

1.类,对象和方法的概念

类是对象的独特表现,每个对象包含各自的私有信息,方法是改变和提供访问的这些数据的手段。

因此,objective-c 采用特定的语法对类和实例应用方法:

[classOrInstance method];

或者理解为消息的传递和接受

[receiver message];

实例如下:

1 myCar = [[Car new] init];
2 [myCar dive];

详细描述关于一个处理分数Objective-c类

代码如下:

 1 //
 2 //  main.m
 3 //  AddressBook
 4 //
 5 //  Created by admin on 15/11/26.
 6 //  Copyright © 2015年 admin. All rights reserved.
 7 //
 8 
 9 ///////////////////fraction.h///////////////////
10 
11 #import <Foundation/Foundation.h>
12 
13 //-------- @interface Part  --------
14 
15 @interface Fraction: NSObject
16 @property int sum;
17 -(void) print;
18 -(void) setNumerator: (int) n;
19 -(void) setDenominator: (int) d;
20 
21 @end
22 
23 
24 //--------- @implementation Part -----
25 
26 @implementation Fraction
27 {
28     int numerator;
29     int denominator;
30 }
31 // 如果没有合成语句,属性sum自动生成的实例变量叫_sum;
32 // @synthesize sum;
33 
34 -(void) setDenominator:(int)d
35 {
36     denominator = d;
37     
38 }
39 
40 -(void) setNumerator:(int)n
41 {
42     numerator = n;
43 }
44 
45 -(void) print
46 {
47     NSLog(@"%i/%i", numerator, denominator);
48     NSLog(@"_sum is %i", _sum);
49 }
50 
51 @end
52 
53 
54 //--------------    Program Part   ---------------
55 int main()
56 {
57     @autoreleasepool {
58         Fraction *myFraction = [[Fraction alloc] init];
59         [myFraction setNumerator: 1];
60         [myFraction setDenominator: 3];
61         [myFraction setSum:3];
62         
63         NSLog (@"This Fraction is :");
64         [myFraction print];
65         
66         NSLog(@"sum is %i", myFraction.sum);
67     }
68     return 0;
69 }

 

其中,@interface部分用于描述类和类的方法; @implementation 部分用于描述数据(类对象的实例变量存储数据),并实现在接口中声明方法的实际代码; program部分的程序代码实现了程序的预期目的。

@interface 

定义新类时,首先告诉objective-c 编译器该类的来由。也就是说,必须为它父类命名。其次定义各种操作方法,此外该部分还需要列出一些元素,称为属性。

@interface NewClassName: ParentCLassName

  propertyAndMethodDeclarations;

@end

此处笔者产生个疑问,属性和实例变量的区别:

成员变量:

1.是在{}声明的

2.先有成员变量后有属性一说。

3.通过权限修饰符@protected、@private、@public更该它的被访问权限。

属性:

1.先@property声明再用@synthesize合成的

2.属性是oc语言的一个新的机制

3.属于类的对象的,通过生成一个该类的对象我们就可以获得它的访问权。

 

通过以上的对比我们不难发现,成员变量可以自由定义在@interface和@implementation中,而属性定义在interface处。

Objective-C中先有的实例变量,需要给外部类使用的用@public声明,内部自己使用的用@private或@protect声明。Objective-C添加了属性后,我觉得Apple的考虑应该是,属性用于对外而实力变量主要用于程序内部使用。这样有利于代码的分离,由于编译器会直接给属性提供对应的实例变量(当然也可以手动指定该属性所对应的实例变量)和getter/setter方法。

参考网站:

http://m.blog.csdn.net/blog/codebat/39347125

http://blog.csdn.net/addychen/article/details/39525681

 

@implementation Part

该部分包含interface部分的代码的实现,而且需要制定存储在类对象中的数据类型。

格式如下

1 @implementation NewClassName
2 3       memberDeclarations;
4 5 methodDefinitions;
6 @end

 

program部分

Fraction *myFraction = [[Fraction alloc] init];是 复合语句,

        Fraction *myFraction;

        myFraction = [Fraction alloc];

        myFraction = [myFraction init];

开始学习时我一直把myFraction当作指针,因为定义形式就是指针类型,书上硬是说是一个引用,其实归根结底就是一个指针。

下一节,详细去区分c++和oc的"."和"->?"操作符。从而综合c类型语言的理解。

 

iOS修炼之道:objective-c 类、对象和方法 1

标签:

原文地址:http://www.cnblogs.com/xunyue/p/5013800.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!