Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (24.65 MB, 900 trang )
Discussion
A class is a virtual entity. A class contains methods and other language specific structures. Let's say you want to write a calculator program. You are creating the user interface and you want each button on the calculator to have a black background, white
text and have a bump user interface, just like a real button. Aren't these all common
traits between all the buttons you want to place on your UI? You got! It's best that we
create a class to represent all our buttons and write the code once and reuse multiple
times.
Classes in objective-C are normally represented with the following code:
Header file
This is where you define what your class basically does: accept user input, rotate
a shape, or whatever. But the header file does not implement any of that functionality. Header files have a .h extension.
Implementation file
After defining the functionality of your class in the header file, here you write the
actual code for all that functionality. Implementation files have a .m extension.
Let's go a bit more into detail by going ahead and creating a class. Follow these steps:
1. In Xcode, go to the File menu and then select New File.
2. A dialog will appear, similar to that shown in Figure 1-23. Here simply select
Objective-C class from the list to the right. Make sure iOS is selected on the left
hand side. After this, press the Next button.
38 | Chapter 1: The Basics
www.it-ebooks.info
Figure 1-23. The Add File dialog in Xcode
3. In the next screen, make sure the Subclass of text box says NSObject. Now press the
Next button (Figure 1-24)
1.11 Creating Custom Classes | 39
www.it-ebooks.info
Figure 1-24. Setting the base class of our new class
4. In the next screen, as shown in Figure 1-25, make sure that the Save As text box
says Person, which is what we'll name our class. On the bottom of this dialog, make
sure that you are saving your class in the correct group/folder.
40 | Chapter 1: The Basics
www.it-ebooks.info
Figure 1-25. Creating a class called Person in Xcode
Now two files will get added to your project. One is called Person.h and the other
Person.m. The first one is the header and the second one is the implementation. Let's
have a look at the contents of the Person.h file:
#import
@interface Person : NSObject
@end
How about the contents of Person.m?
#import "Person.h"
@implementation Person
- (id)init
{
self = [super init];
if (self) {
// Initialization code here.
}
return self;
}
@end
1.11 Creating Custom Classes | 41
www.it-ebooks.info
We can see that Xcode has pre-populated these files with some content. We still don't
really know what this content is, but it's a start to our code. Now we have a class named
Person. Where did we get this name? It's not the name of the file itself, but Xcode took
the file name in Figure 1-25 and used it as the class name. If you have a look at the
contents of the Person.h again, you will notice this line of code:
@interface Person : NSObject
In short, what comes after the @interface keyword is your class name in this case. If
you don't like this name, simply right click on it and then select Refactor and then
Rename. This will guide you through a refactoring process through which you can
rename your class.
See Also
XXX
1.12 Defining Functionality for Classes
Problem
You want to define some functionality for your classes and allow them to be reused later.
Solution
Create instance or class methods for your classes in order to create reusable blocks of
code, or simply call a method in your program.
Discussion
Nearly every programming languages creates procedures and functions to encapsulate
specific functionality, especially functionality that the programmer uses over and over.
Some languages consider "procedure" and "function" just terms for the same thing,
while others make a distinction between them. A procedure is a block of code with a
name and an optional set of parameters. It does not have a return value. In ObjectiveC, a procedure returns void to indicate it does not return a value A function is similar
but does have a return value. Here is a simple procedure (with an empty body) written
in C:
void sendEmailTo(const char *paramTo,
const char *paramSubject,
const char *paramEmailMessage){
}
/* send the email here ... */
This procedure is named sendEmailTo and has three parameters: paramTo, paramSub
ject, and paramEmailMessage. We can then call this procedure as follows:
42 | Chapter 1: The Basics
www.it-ebooks.info
sendEmailTo("somebody@somewhere.com",
"My Subject",
"Please read my email");
Turning this procedure into a function that returns a Boolean value, we will have code
similar to this:
BOOL sendEmailTo(const char *paramTo,
const char *paramSubject,
const char *paramEmailMessage){
/* send the email here ... */
if (paramTo == nil ||
paramSubject == nil ||
paramEmailMessage == nil){
/* One or some of the parameters are nil */
NSLog(@"Nil parameter(s) is/are provided.");
return NO;
}
}
return YES;
Calling this function is similar to calling the sendEmailTo procedure except that with a
function, we can retrieve the return value, like so:
BOOL isSuccessful = sendEmailTo("somebody@somewhere.com",
"My Subject",
"Please read my email");
if (isSuccessful){
/* Successfully sent the email */
} else {
/* Failed to send the email. Perhaps we should display
an error message to the user */
}
In Objective-C, each method is created for a class. Creating Objective-C methods is
quite different from writing procedures and functions in a programming language such
as C. Methods fall into two categories: instance or class. Instance methods are methods
that can be called on an instance of the class (that is, on each object you create based
on the class), whereas class methods get called on the class itself and do not require an
instance of the class to be created by the programmer. To create a method in ObjectiveC, follow these steps in the .m file of your target class:
1. Type − if you want an instance method or + if you want a class method.
2. Choose the return type of your method and enclose it within parentheses—for
instance, (void) for no return value, (BOOL) for a Boolean value, (NSObject *) to
return an instance of NSObject, and so on.
1.12 Defining Functionality for Classes | 43
www.it-ebooks.info