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

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类型语言的理解。

时间: 2024-12-25 06:51:35

iOS修炼之道:objective-c 类、对象和方法 1的相关文章

【IOS 开发】Object - C 面向对象 - 类 , 对象 , 成员变量 , 成员方法

. 一. 类定义 类定义需要实现两部分 : -- 接口部分 : 定义类的成员变量和方法, 方法是抽象的, 在头文件中定义; -- 实现部分 : 引入接口部分的头文件, 实现抽象方法; 1. 接口部分定义 (1) 接口部分定义格式 接口部分定义格式 : @interface className : superClassName { type _variableName; ... ... } - (type) methodName : type parameterName; @end -- 接口定义

ios修炼之道 :objective-c篇 1

初次想到写博客,正好笔者想学习ios 相关工作,因此记录下学历历程,方便自己日后回忆复习,同时也可以和喜欢ios 的同学分享我的学历过程. 因为笔者之前从事c/c++语言相关的开发,因此,一些c语言基础性的知识此处省略. 1. 实现如何用终端编译执行program admin $ clang -fobjc-arc files -o program admin $ ./program 2.简述hello.m程序 1 #import <Foundation/Foundation.h> 2 3 4

iOS开发核心语言Objective C —— 全部知识点总结

本分享是面向有意向从事iOS开发的伙伴及苹果产品的发烧友,亦或是已经从事了iOS的开发人员,想进一步提升者.假设您对iOS开发有极高的兴趣,能够与我一起探讨iOS开发.一起学习,共同进步.假设您是零基础.建议您先翻阅我之前分享的iOS开发分分钟搞定C语言系列,然后在開始Objective C语言的学习,假设您遇到问题也能够与我探讨.另外将无偿分享自己整理出来的大概400G iOS学习视频及学习资料,都是干货哦.能够新浪微博私信?关注极客James,期待与您的共同学习和探讨! ! 由于时间有限,每

iOS开发核心语言Objective C —— 所有知识点总结

C和OC对比 OC中主要开发在什么平台上的应用程序?答:可以使用OC开发Mac OS X平台和iOS平台的应用程序 OC中新增关键字大部分是以什么开头?答:OC中新增关键字大部分是以@开头 OC中新增加了那些数据类型?答:Block类型指针类型(Class, id类型)空类型特殊类型(SEL, nil) 面向对象特性是什么?答:继承性,封装性,多态性 import和#include有什么区别? 答:import 的功能和 include一样, 是将右边的文件拷贝到当前import的位置.为了降低

C++实现根据类名动态生成类对象

在开发后台服务的过程中,我们常常需要从数据库中取数据,并将数据缓存在本地中,另外,我们的服务还需要有更新数据的能力:包括定时的主动更新以及数据库数据更新时服务收到通知的被动更新. 之前在需要用到以上功能的时候,模仿着组内通用的数据Cache部分的代码来写,十分方便,基本上只需要自己写两个类:一个是取数据并缓存数据的类XXXData,一个是扇出数据的类XXXFetcher. 在需要使用数据的时候,通过: FetcherFactory::getFetcher<XXXFetcher>() 即可获取一

lua类对象

--这里是Lua的类对象实例化方法--声明,这里声明了类名还有属性,并且给出了属性的初始值. LuaClass = {x = 0, y = 0} --这句是重定义元表的索引,就是说有了这句,这个才是一个类. LuaClass.__index = LuaClass --构造体,构造体的名字是随便起的,习惯性改为New() function LuaClass:New(x, y) local self = {}; --初始化self,如果没有这句,那么类所建立的对象改变,其他对象都会改变 setmet

10-Objective-C特有语法:Category、类对象、description、SEL、NSLog输出增强

一.    分类-Category 1.        基本用途 OC中如何在不改变原来类模型的前提下,给类扩充一些方法?有2种方式 1>.继承 2>.分类(Category) 2.        格式 分类的声明 @interface 类名 (分类名称) // 方法声明 @end 分类的实现 @implementation 类名 (分类名称) // 方法实现 @end 3.        好处 一个庞大的类可以分模块开发,可以由多个人来编写,更有利于团队合作 给系统自带的类添加分类,例如:

(一)Python入门-6面向对象编程:03类对象-类属性-类方法-静态方法

一:类对象 前面讲的类定义格式中,“class 类名:”.实际上,当解释器执行class 语句时, 就会创建一个类对象. [操作] #测试类对象的生成 class Student: pass #空语句 print(type(Student)) print(id(Student)) print(Student) s1 = Student() print(s1) Stu2 = Student s2 = Stu2() print(Stu2) print(s2) 运行结果: <class 'type'>

第6章 Java类中的方法

1.如何定义java的方法 什么是方法:方法使用来解决一类问题的代码集合,是一个功能模块在类中定义个方法的方法是: 访问修饰符 返回值类型 方法名(参数列表){ 方法体 } 1.访问修饰符,是限制该方法允许被访问的权限范围,可以是:public,protected,private还可以省略2.返回值,如果有返回值需要在这里说明类型,并用return返回,如果没有返回值,使用void3.方法名,使用标识符命名4.参数列表,传递给方法的参数列表 根据返回值和参数的不同,方法大致上分为一下四类:? 无