2012年5月26日 星期六

Synthesize and array

refer to Addison Wesley - Programming.in.ObjectiveC.2.0.2nd (2009)

AddressCard.h
#import <Foundation/NSObject.h>
#import <Foundation/NSString.h>
@interface AddressCard: NSObject
{
NSString    *name;
NSString    *email;
}
@property (copy, nonatomic) NSString *name, *email;
-(void) print;
@end

AddressCard.m
#import “ AddressCard.h ”
@implementation AddressCard
@synthesize name, email;
-(void) print
{
NSLog (@ ” ==================================== ” );
NSLog (@ ” |                                  | ” );
NSLog (@ ” |  %-31s | ” , [name UTF8String]);
NSLog (@ ” |  %-31s | ” , [email UTF8String]);
NSLog (@ ” |                                  | ” );
NSLog (@ ” |                                  | ” );
NSLog (@ ” |                                  | ” );
NSLog (@ ” |       O                  O       | ” );
NSLog (@ ” ==================================== ” );
}
-(void) setName: (NSString *) theName andEmail: (NSString *) theEmail
{
self.name = theName;
self.email = theEmail;
}
@end

 Addressbook.h
#import <Foundation/NSArray.h>
#import “ AddressCard.h ”
@interface AddressBook: NSObject
{
NSString        *bookName;
NSMutableArray  *book;
}
-(id) initWithName: (NSString *) name;
-(void) addCard: (AddressCard *) theCard;
-(void) removeCard: (AddressCard *) theCard;
-(AddressCard *) lookup: (NSString *) theName;
-(int)  entries;
-(void) list;
-(void) dealloc;
@end

 Addressbook.m
#import “ AddressBook.h ”
@implementation AddressBook;
// set up the AddressBook ’ s name and an empty book
-(id) initWithName: (NSString *) name
{
   self = [super init];
   if (self) {
      bookName = [ NSString alloc] initWithString: name];
      book = [[NSMutableArray alloc] init];
   }
   return self;
}
-(void) addCard: (AddressCard *) theCard
{
   [book addObject: theCard];
}
-(int) entries
{
   return [book count];
}
-(void) list
{
   NSLog (@ ” ======== Contents of: %@ ========= ” , bookName);
   for ( AddressCard *theCard in book ) // fast enumeration to sequence through each element of  the book array.
       NSLog (@ ” %-20s    %-32s ” , [theCard.name UTF8String],
       [theCard.email UTF8String]);
       NSLog (@ ” ================================================== ” );
}
-(void) dealloc
{
   [bookName release];
   [book release];
   [super dealloc];
}
-(AddressCard *) lookup: (NSString *) theName
{
for ( AddressCard *nextCard in book )
   if ( [[nextCard name] caseInsensitiveCompare: theName] == NSOrderedSame )
      return nextCard;
return nil;
}
-(void) removeCard: (AddressCard *) theCard
{
[book removeObjectIdenticalTo: theCard];
}
-(BOOL) isEqual (AddressCard *) theCard
{
if ([name isEqualToString: theCard.name] == YES &&
   [email isEqualToString: theCard.email] == YES)
   return YES;
else
   return NO;
}
-(void) sort
{
[book sortUsingSelector: @selector(compareNames:)];
}
// Compare the two names from the specified address cards
-(NSComparisonResult) compareNames: (id) element
{
return [name compare: [element name]];
}
@end

 Test Program
#import “ AddressBook.h ”
#import <Foundation/NSAutoreleasePool.h>
int main (int argc, char *argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSString  *aName = @ ” Julia Kochan ” ;
NSString  *aEmail = @ ” jewls337@axlc.com ” ;
NSString  *bName = @ ” Tony Iannino ” ;
NSString  *bEmail = @ ” tony.iannino@techfitness.com ” ;
NSString  *cName = @ ” Stephen Kochan ” ;
NSString  *cEmail = @ ” steve@kochan-wood.com ” ;
NSString  *dName = @ ” Jamie Baker ” ;
NSString  *dEmail = @ ” jbaker@kochan-wood.com ” ;
AddressCard *card1 = [[AddressCard alloc] init];
AddressCard *card2 = [[AddressCard alloc] init];
AddressCard *card3 = [[AddressCard alloc] init];
AddressCard *card4 = [[AddressCard alloc] init];
AddressBook  *myBook = [AddressBook alloc];
// First set up four address cards
[card1 setName: aName andEmail: aEmail];
[card2 setName: bName andEmail: bEmail];
[card3 setName: cName andEmail: cEmail];
[card4 setName: dName andEmail: dEmail];
// Now initialize the address book
myBook = [myBook initWithName: @ ” Linda ’ s Address Book ” ];
NSLog (@ ” Entries in address book after creation: %i ” ,
[myBook entries]);
// Add some cards to the address book
[myBook addCard: card1];
[myBook addCard: card2];
[myBook addCard: card3];
[myBook addCard: card4];
NSLog (@ ” Entries in address book after adding cards: %i ” ,
[myBook entries]);
// List all the entries in the book now
[myBook list];

// Look up a person by name
NSLog (@ ” Stephen Kochan ” );
myCard = [myBook lookup: @ ” stephen kochan ” ];
if (myCard != nil)
   [myCard print];
else
   NSLog (@ ” Not found! ” );

[myBook sort];
[myBook list];

[myBook removeCard: myCard];
[myBook list];    // verify it ’ s gone

[card1 release];
[card2 release];
[card3 release];
[card4 release];
[myBook release];
[pool drain];
return 0;
}

沒有留言: