---------------- MyFoo.h -----------------
#import <Foundation/Foundation.h>
@interface MyFoo : NSObject {
NSString *myName;
}
- (id) initWithName: (NSString *)name;
- (NSString *) getName;
- (void) setName: (NSString *)name;
@end
---------------- MyFoo.m -----------------
#import "MyFoo.h" @implementation MyFoo - (id) init { return [self initWithName:@"I'm foo."]; } - (id) initWithName: (NSString *)name { if (self = [super init]) { myName = name; } return self; } - (NSString *) getName { return myName; } - (void) setName:(NSString *)name { // 一切都是引用计数 [name retain]; [myName release]; myName = name; } - (id) copyWithZone:(NSZone *) zone { // MyFoo 的子类应该这样写 copyWithZone // id copiedXXX = [super copyWithZone:zone]; // ... do copiedXXX copy-work // 这里的 [self class] 保证创建了正确的 instance id copiedFoo = [[[self class] allocWithZone:zone] initWithName:[self getName]]; return copiedFoo; } - (void) dealloc { [myName release]; [super dealloc]; } @end
---------------- main.m ------------------
#import "MyFoo.h" int main (int argc, const char * argv[]) { MyFoo *f = [[MyFoo alloc] init]; NSLog(@"Name 111 = %@", [f getName]); [f setName:@"kasicass"]; NSLog(@"Name 222 = %@", [f getName]); MyFoo *f2 = [f copy]; [f2 setName:@"cool!"]; NSLog(@"Name 333 = %@, %@", [f getName], [f2 getName]); return 0; }
------------------------------------------
评论