标签:
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部分的程序代码实现了程序的预期目的。
定义新类时,首先告诉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
该部分包含interface部分的代码的实现,而且需要制定存储在类对象中的数据类型。
格式如下
1 @implementation NewClassName 2 { 3 memberDeclarations; 4 } 5 methodDefinitions; 6 @end
Fraction *myFraction = [[Fraction alloc] init];是 复合语句,
Fraction *myFraction;
myFraction = [Fraction alloc];
myFraction = [myFraction init];
开始学习时我一直把myFraction当作指针,因为定义形式就是指针类型,书上硬是说是一个引用,其实归根结底就是一个指针。
下一节,详细去区分c++和oc的"."和"->?"操作符。从而综合c类型语言的理解。
标签:
原文地址:http://www.cnblogs.com/xunyue/p/5013800.html