方法定义对象的行为
方法定义了一个对象可以做。一种方法是一段代码,你要定义在一个类中执行任务或子程序。方法可以访问存储在类数据,并且可以使用该信息来执行某种操作。
例如,给一个待办事项(XYZToDoItem)的能力得到标记为已完成,你可以添加一个markAsCompleted方法的类的接口。稍后,您将在类实现实现此方法的行为,如实施办法描述。
例如,给一个待办事项(XYZToDoItem)的能力得到标记为已完成,你可以添加一个markAsCompleted方法的类的接口。稍后,您将在类实现实现此方法的行为,如实施办法描述。
@interface XYZToDoItem : NSObject @property NSString *itemName; @property BOOL completed; @property (readonly) NSDate *creationDate; - (void)markAsCompleted; @end
减号( - )在方法名的前面表明它是一个实例方法,它可以被称作该类的一个对象。这个减号的类的方法,这是表示用加号(+)区分开来。类方法可以调用类本身。类方法的一个常见例子是类的工厂方法,你在与Fundation了解。您还可以使用类的方法来访问一些片与类相关联的共享信息。
void关键字用于在括号在声明的开头,表明该方法没有返回值。在这种情况下,markAsCompleted方法需要在没有参数。参数在方法参数中更详细地讨论。
方法参数
你与声明参数的方法来传递一些信息,当你调用一个方法。
举例来说,你可以从上面的代码片段修改markAsCompleted方法采取在一个单一的参数,将决定该项目是否被标记为已完成或未完成的。通过这种方式,你可以切换,而不是将它设置为只完成了该项目的完成状态。
举例来说,你可以从上面的代码片段修改markAsCompleted方法采取在一个单一的参数,将决定该项目是否被标记为已完成或未完成的。通过这种方式,你可以切换,而不是将它设置为只完成了该项目的完成状态。
@interface XYZToDoItem : NSObject @property NSString *itemName; @property BOOL completed; @property (readonly) NSDate *creationDate; - (void)markAsCompleted:(BOOL)isComplete; @end现在,你的方法接受一个参数:isComplete,BOOL类型。
当你引用一个方法参数的名字,你在冒号作为方法名称的一部分,所以更新的方法的名称现在??markAsCompleted:。如果一个方法有多个参数,方法名被分解并穿插的参数名称。如果你想另一个参数添加到这个方法,它的声明是这样的:
- (void)markAsCompleted:(BOOL)isComplete onDate:(NSDate *)date;这里,所述方法的名称写为markAsCompleted:onDate:。该名在isComplete和日期用在实施访问时调用该方法,因为如果这些名字分别为变量提供的值。
实现方法
方法实现使用大括号来包含相关的代码。该方法的名称必须与它在接口文件对应,参数和返回类型必须完全匹配。
下面是一个简单实现markAsCompleted的:您添加到您的XYZToDoItem类接口的方法:
下面是一个简单实现markAsCompleted的:您添加到您的XYZToDoItem类接口的方法:
@implementation XYZToDoItem - (void)markAsCompleted:(BOOL)isComplete { self.completed = isComplete; } @end就像属性,方法可以是私有或公共。公共方法在公共接口中声明,所以可以看到,并呼吁通过其他对象。其相应的执行驻留在实现文件中,并且不能被其他对象可见。私有方法只有一个执行,是内部的类,这意味着他们只对类实现的内部调用。这是一个强大的机制,增加内部行为的一类,而不允许其他对象访问到它。
例如,假设你要保留一个待办事项的completionDate更新。如果待办事项被标记为已完成,设置completionDate为当前日期。如果它被标记为未完成, completionDate设置为nil ,因为它尚未完成。因为更新待办项目的completionDate是一个自包含的任务,最好的做法是写自己的方法吧。然而,重要的是要确保其他对象不能调用此方法,否则,另一个对象可以设置待办事项的completionDate任何东西在任何时候。出于这个原因,你让这个方法私有。
现在,更新XYZToDoItem的实现,包括私有方法setCompletionDate是被调用里面markAsCompleted :更新待办事项的completionDate每当它被标记为已完成或未完成的。请注意,你不添加任何的接口文件,因为你不希望其他对象,看看这个方法。
@implementation XYZToDoItem - (void)markAsCompleted:(BOOL)isComplete { self.completed = isComplete; [self setCompletionDate]; } - (void)setCompletionDate { if (self.completed) { self.completionDate = [NSDate date]; } else { self.completionDate = nil; } } @end
此时,您已经定义使用XYZToDoItem类的to-do列表项的基本表示。 XYZToDoItem存储有关其自身的名称,创建日期,完成国有物业形式的信息,它定义了它能做什么,得到标记为已完成或尚未完成的,使用的方法。这是你需要完成实施,在未来的教程你的todolist的应用程序功能的程度。但是,您可以通过添加自己的属性和方法的类来整合新的行为到你的应用程序总是尝试。
ios7编写自定义类2——Start Developing iOS Apps Today——从今天开始开发IOS(IOS7版)系列源文档翻译(十八)