ios basic:2.3 writing a custom class

在你开发一个app时,你会发现有许多机会去custom你自己的类

当你在需要把自定义的behavior 与data封装在一起的时候,custom class 是非常有用的,在custom class中,你可以定义自己的存储,掌控,显示数据的行为。

比如,在ios Clock app中的world Clock Tab,在该table view中每个cell显示的内容比普通的table view得cell显示的内容要多,因此,你就可以通过custom 一个UITableViewCell 的子类去扩展table view 的cells,让他显示更多的内容。

当你在custom这个类得时候,你需要添加一个label的outlets去显示the hours head information

去用一个image view 去在cell的右边显示 custom clock.



在这里,你将学到用objective-c的语法和class structure去完全实现ToDoListAPP

Declaring and Implementation a Class

在Objective-c中一个class由两个完全不同的pieces组成:The interface and The implementation

The interface清晰的指明了一个给定类型的对象怎样有意识的让别的objects去使用它

换句话说The interface 定义了这个class 和其他的class的对象实例之间交互的接口。

The implementation包括了所有在The interface中声明的method的代码实现。

对一个object的设计,应该隐藏它内部实现的的具体细节。在objective-c中,The interface 和The implementation放在不同的file中,仅仅The interface file 是public的,如同在c中一样,你定义了header file 和source file去把你的code的实现细节与文件声明分开来。Interface文件用.h为扩展名,Implementation文件用.m为扩展名。

Interface

interface 是objective-c用来声明一个class interface的语法


上图显示了:声明了一个类名叫做XYZToDoItem的class,XYZToDoItem继承自NSObject

public的property和behavior在The interface中定义,在上图的例子当中,没有为class XYZToDoItem定义任何的property和behavior,它唯一告诉我们的是XYZToDoList这个类继承自NSObject这个类,根据以前学过的知识可知,XYZToDoList继承了NSObject类的所有的方法和属性。

在Objective-c中,所有的类都继承自NSObject类或者NSObject 类的子类

Implementation

objective-c去declare一个implementation文件


如果你declare任何的方法在The interface中,你必须在他所对应的Implementation里用代码实现你声明的方法

Properties store a object's data

现在去考虑ToDoList app需要保存那些information

当它被创建的时候你需要知道他的名字,在你的custom TodoListItem类中,在properties中存储这些信息

在The interface file中声明的这些properties,


在XYZToDOList的interface properties中,如上图所示,声明了三个property,其他的class可以得到这三个property的值并且可以更改property的值

你也可以声明不能其他的class被更改的property,用关键字readonly可以实现

objective-c中,在声明property时一般都指明property attributes,你可以用如下的方法update NSData的property attributes为readonly


property 可以set为private 或public,在某些时候,你就需要把一个property值set为private,让别的class不能获取他的值,或看不到他。

在这里,比如你想set NSDate的property为private,可以在implementation文件里声明:


这样别的class就看不到NSDate类得实例completionData了,自然不能对他作出更改

你用getter和setter方法对property的值进行获取和设定,getter方法返回的是属性的值,setter方法改变这个值,

通常对这两个方法的调用用dot notation .如


Methods defines an object's behavior

Method定义了一个对象能够做什么

Method是a piece of code,这些code是你自己定义的用来完成特定任务的,或者它仅仅是一个class的子程序

Method有权限去获取类中的一些数据,并用这些数据去执行一些操作


上图中在XYZToDOItem类中declar一个markAsCompleted方法,你需要在implementation文件中实现他的行为

在(void)前的minus notation表示这是一个instance method,class的object可以对他调用

class method用+ notation来标记,class method能够被这个类自身调用

你也能够用class method来获取这个类的一些信息

括号中的void关键字是声明的开始,表明这个方法没有return任何值

Method Parameters

在声明方法时可以用参数来声明,当该method被调用时,可以用传进来的参数去做一些事情


如上图所示,方法markAsCompleted:带了一个BOOL类型的参数isComplete;

方法名包含冒号,上图方法的方法名为markAsCompleted:

当方法有多个参数时如


方法名被阻断,应该把它们组合起来组成完整的方法名

markAsComplemeted:onDate:就是上图方法的方法名

Method implementation

Method用括弧括起来的代码来实现。在引用方法的时候必须写完整的方法名,方法参数的类型必须与声明时的参数类型一致

像property一样,方法也能够被声明为private与public

public method被声明在public interface中,可以被其他的objects看见和调用

private method仅仅在implementation文件中有实现,他是该类内部的方法,只能在该类的内部被其他的方法调用

这种在类中添加行为而不允许别的类去获取他是非常好的








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值