我们 已经讨论过 如何 正确地 编写 setName: 和 setEmail:这两项措施,并且 也应该理解了 其中的重要原理。我们 回到 上一篇博文中的程序,让 系统 自动 生成 setName: 和 setEmail:这两项措施。下面 是 修改过后的AddressCard.h文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
#import <Foundation/NSObject.h>
#import <Foundation/NSString.h>
@interface
AddressCard
:
NSObject
{
NSString
*name
;
NSString
*email
;
}
@property
(
copy
,
nonatomic
)
NSString
*name
,
*email
;
-
(
void
)
print
;
@end
|
其中的
1
|
@property
(
copy
,
nonatomic
)
NSString
*name
,
*email
;
|
这行语句 将 AddressCard这类物件的两项属性name 和 email 标记出来。同时 这行语句 又 列举出 name 和 email这两项属性的两个特性,它们 分别 是 copy 和 nonatomic。
其中 copy这个特性 表明 在setName: 和 setEmail:这两项措施当中 将 name 和 email两个个体变量 做个 备份,就像 在上一篇博文里面那样。默认的特性 是 不做备份,而 简单的 将 参数中的物件的地址 存储 在name 和 email这两个变量中,这 在上一篇博文中 也示范过。
而 nonatomic这个特性 表明 name 或 email这两项措施 在将 变量name 和 email的值 读取出来之前,不应该保持 或者 自动释放 变量name 和 email。这一点 在今后 会 更加详细地 讲述。
接着 在AddressCard.m这个文件当中 需要用 @synthesize这个命令 来生成 setName;,name 和 setEmail:,email两对措施。下面 是 经过修改了地AddressCard.m文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
#import "AddressCard.h"
@implementation
AddressCard
@synthesize
name
,
email
;
-
(
void
)
print
{
NSLog
(
@"================================="
)
;
NSLog
(
@"| |"
)
;
NSLog
(
@"|%-31s|"
,
[
name
UTF8String
]
)
;
NSLog
(
@"|%-31s|"
,
[
email
UTF8String
]
)
;
NSLog
(
@"| |"
)
;
NSLog
(
@"| |"
)
;
NSLog
(
@"| 0 0 |"
)
;
NSLog
(
@"================================="
)
;
}
-
(
void
)
dealloc
{
[
name
release
]
;
[
email
release
]
;
[
super
dealloc
]
;
}
@end
|
大家 可以 自己 去验证一下,自动生成的setName:,name 和 setEmail:,email这两对措施 是否能 正常 工作。
接下来 我们 要为 AddressCard这类物件 编写 一项新的措施。大家 很可能 希望 同时 设定 某个AddressCard类型物件的姓名 和 邮箱地址。于是 新编写的措施 就是 这样:
1
2
3
4
5
6
7
8
9
|
-
(
void
)
setName
:
(
NSString
*
)
theName
andEmail
:
(
NSString
*
)
theEmail
{
self
.
name
=
theName
;
self
.
email
=
theEmail
;
}
|
在setName:andEmail:这项措施中 我们 依靠 系统自动生成的setName: 和 setEmail:这两项措施 正确地 设定了 实施对象所包含的name 和 email两个个体变量。
下面的程序 测试了 setName:andEmail:这项新的措施 是否能 正常 工作:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
#import <Foundation/NSAutoreleasePool.h>
#import "AddressCard.h"
int
main
(
int
argc
,
const
char
*argv
[
]
)
{
NSAutoreleasePool
*pool
=
[
[
NSAutoreleasePool
alloc
]
init
]
;
AddressCard
*myAddressCard
=
[
[
AddressCard
alloc
]
init
]
;
[
myAddressCard
setName
:
@"Zijin Zhang"
andEmail
:
@"540596744@qq.com"
]
;
[
myAddressCard
print
]
;
[
myAddressCard
release
]
;
[
pool
drain
]
;
return
0
;
}
|
运行后的结果 是 这样的:
1
2
3
4
5
6
7
8
|
2012-04-18 17:33:57.218 Sample[5189:707] =================================
2012-04-18 17:33:57.219 Sample[5189:707] | |
2012-04-18 17:33:57.220 Sample[5189:707] |Zijin Zhang |
2012-04-18 17:33:57.220 Sample[5189:707] |540596744@qq.com |
2012-04-18 17:33:57.221 Sample[5189:707] | |
2012-04-18 17:33:57.221 Sample[5189:707] | |
2012-04-18 17:33:57.222 Sample[5189:707] | 0 0 |
2012-04-18 17:33:57.222 Sample[5189:707] =================================
|