Mobile Development 101: Developing
Apps for the iPhone and the Android
              Platforms

            Michael Galpin, eBay
                @michaelg
Why Mobile?
Mobile Transactions
     30.0




     22.5
$M




     15.0




      7.5




       0
     Jan 1, 2008   May 1, 2008   Aug 1, 2008    Oct 1, 2008   Dec 1, 2008      Feb 1, 2009   Apr 1, 2009   Jun 1, 2009

                                               Mobile Web                   iPhone
Usage
Capabilities
Usage
      Capabilities


Phones That Matter
Distribution Barriers
What Platforms?
iPhone



50% of Mobile Internet Usage
Comprehensive Tools
High Volume Distribution Channel
Overview

•   Programming Language: Objective-C

•   Tools: XCode/Interface Builder, iPhone SDK

•   Framework: Cocoa Touch

•   Features: Multi-threaded, Open GL ES, Contacts, Email,
    WebKit, iTunes, GPS, Google Maps, (Video)Camera, Local
    Database, Push Notifications

•   Pitfalls: Memory management, no background processing,
    no intra-application communication*, QA, App Store
    regulations
Objective-C


•   Derived and compatible with C

    •   C libraries in many cases

•   Object-oriented

•   Smalltalk inspired

•   Surprisingly dynamic
@interface CurrencyAmount : NSObject <NSCoding>
{
	 NSDecimalNumber *amount;
	 NSString *currencyID;
}

@property (nonatomic, retain) NSDecimalNumber *amount;
@property (nonatomic, retain) NSString *currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID;
- (id) initWithNode:(XMLNode *) node;
- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale;
- (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID;
- (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity;
- (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount;
-(NSString*) stringValue;
-(NSString*) rawDecimalAsString;
-(NSString*) formatStringWithoutCurrency;
-(NSString*) formatStringShort:(BOOL) shortForm;
-(NSString*) currencyPrefixShort:(BOOL) shortForm;
- (NSComparisonResult)compare:(CurrencyAmount *)other;
- (BOOL) isZeroAmount;

@end
interface(header)
@interface CurrencyAmount : NSObject <NSCoding>
{
	 NSDecimalNumber *amount;
	 NSString *currencyID;
}

@property (nonatomic, retain) NSDecimalNumber *amount;
@property (nonatomic, retain) NSString *currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID;
- (id) initWithNode:(XMLNode *) node;
- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale;
- (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID;
- (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity;
- (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount;
-(NSString*) stringValue;
-(NSString*) rawDecimalAsString;
-(NSString*) formatStringWithoutCurrency;
-(NSString*) formatStringShort:(BOOL) shortForm;
-(NSString*) currencyPrefixShort:(BOOL) shortForm;
- (NSComparisonResult)compare:(CurrencyAmount *)other;
- (BOOL) isZeroAmount;

@end
@interface CurrencyAmount : NSObject <NSCoding>
{
	 NSDecimalNumber *amount;
	 NSString *currencyID;
}

@property (nonatomic, retain) NSDecimalNumber *amount;
@property (nonatomic, retain) NSString *currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID;
- (id) initWithNode:(XMLNode *) node;
- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale;
- (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID;
- (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity;
- (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount;
-(NSString*) stringValue;
-(NSString*) rawDecimalAsString;
-(NSString*) formatStringWithoutCurrency;
-(NSString*) formatStringShort:(BOOL) shortForm;
-(NSString*) currencyPrefixShort:(BOOL) shortForm;
- (NSComparisonResult)compare:(CurrencyAmount *)other;
- (BOOL) isZeroAmount;

@end
inheritance
@interface CurrencyAmount : NSObject <NSCoding>
{
	 NSDecimalNumber *amount;
	 NSString *currencyID;
}

@property (nonatomic, retain) NSDecimalNumber *amount;
@property (nonatomic, retain) NSString *currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID;
- (id) initWithNode:(XMLNode *) node;
- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale;
- (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID;
- (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity;
- (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount;
-(NSString*) stringValue;
-(NSString*) rawDecimalAsString;
-(NSString*) formatStringWithoutCurrency;
-(NSString*) formatStringShort:(BOOL) shortForm;
-(NSString*) currencyPrefixShort:(BOOL) shortForm;
- (NSComparisonResult)compare:(CurrencyAmount *)other;
- (BOOL) isZeroAmount;

@end
@interface CurrencyAmount : NSObject <NSCoding>
{
	 NSDecimalNumber *amount;
	 NSString *currencyID;
}

@property (nonatomic, retain) NSDecimalNumber *amount;
@property (nonatomic, retain) NSString *currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID;
- (id) initWithNode:(XMLNode *) node;
- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale;
- (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID;
- (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity;
- (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount;
-(NSString*) stringValue;
-(NSString*) rawDecimalAsString;
-(NSString*) formatStringWithoutCurrency;
-(NSString*) formatStringShort:(BOOL) shortForm;
-(NSString*) currencyPrefixShort:(BOOL) shortForm;
- (NSComparisonResult)compare:(CurrencyAmount *)other;
- (BOOL) isZeroAmount;

@end
protocol
@interface CurrencyAmount : NSObject <NSCoding>
{
	 NSDecimalNumber *amount;
	 NSString *currencyID;
}

@property (nonatomic, retain) NSDecimalNumber *amount;
@property (nonatomic, retain) NSString *currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID;
- (id) initWithNode:(XMLNode *) node;
- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale;
- (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID;
- (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity;
- (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount;
-(NSString*) stringValue;
-(NSString*) rawDecimalAsString;
-(NSString*) formatStringWithoutCurrency;
-(NSString*) formatStringShort:(BOOL) shortForm;
-(NSString*) currencyPrefixShort:(BOOL) shortForm;
- (NSComparisonResult)compare:(CurrencyAmount *)other;
- (BOOL) isZeroAmount;

@end
@interface CurrencyAmount : NSObject <NSCoding>
{
	 NSDecimalNumber *amount;
	 NSString *currencyID;
}

@property (nonatomic, retain) NSDecimalNumber *amount;
@property (nonatomic, retain) NSString *currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID;
- (id) initWithNode:(XMLNode *) node;
- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale;
- (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID;
- (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity;
- (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount;
-(NSString*) stringValue;
-(NSString*) rawDecimalAsString;
-(NSString*) formatStringWithoutCurrency;
-(NSString*) formatStringShort:(BOOL) shortForm;
-(NSString*) currencyPrefixShort:(BOOL) shortForm;
- (NSComparisonResult)compare:(CurrencyAmount *)other;
- (BOOL) isZeroAmount;

@end
@interface CurrencyAmount : NSObject <NSCoding>
{
	 NSDecimalNumber *amount;
	 NSString *currencyID;
                            instance variable
}

@property (nonatomic, retain) NSDecimalNumber *amount;
@property (nonatomic, retain) NSString *currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID;
- (id) initWithNode:(XMLNode *) node;
- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale;
- (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID;
- (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity;
- (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount;
-(NSString*) stringValue;
-(NSString*) rawDecimalAsString;
-(NSString*) formatStringWithoutCurrency;
-(NSString*) formatStringShort:(BOOL) shortForm;
-(NSString*) currencyPrefixShort:(BOOL) shortForm;
- (NSComparisonResult)compare:(CurrencyAmount *)other;
- (BOOL) isZeroAmount;

@end
@interface CurrencyAmount : NSObject <NSCoding>
{
	 NSDecimalNumber *amount;
	 NSString *currencyID;
}

@property (nonatomic, retain) NSDecimalNumber *amount;
@property (nonatomic, retain) NSString *currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID;
- (id) initWithNode:(XMLNode *) node;
- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale;
- (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID;
- (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity;
- (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount;
-(NSString*) stringValue;
-(NSString*) rawDecimalAsString;
-(NSString*) formatStringWithoutCurrency;
-(NSString*) formatStringShort:(BOOL) shortForm;
-(NSString*) currencyPrefixShort:(BOOL) shortForm;
- (NSComparisonResult)compare:(CurrencyAmount *)other;
- (BOOL) isZeroAmount;

@end
@interface CurrencyAmount : NSObject <NSCoding>
{
	 NSDecimalNumber *amount;
	 NSString *currencyID;
}
                                 method declarations
@property (nonatomic, retain) NSDecimalNumber *amount;
@property (nonatomic, retain) NSString *currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID;
- (id) initWithNode:(XMLNode *) node;
- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale;
- (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID;
- (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity;
- (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount;
-(NSString*) stringValue;
-(NSString*) rawDecimalAsString;
-(NSString*) formatStringWithoutCurrency;
-(NSString*) formatStringShort:(BOOL) shortForm;
-(NSString*) currencyPrefixShort:(BOOL) shortForm;
- (NSComparisonResult)compare:(CurrencyAmount *)other;
- (BOOL) isZeroAmount;

@end
@interface CurrencyAmount : NSObject <NSCoding>
{
	 NSDecimalNumber *amount;
	 NSString *currencyID;
}

@property (nonatomic, retain) NSDecimalNumber *amount;
@property (nonatomic, retain) NSString *currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID;
- (id) initWithNode:(XMLNode *) node;
- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale;
- (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID;
- (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity;
- (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount;
-(NSString*) stringValue;
-(NSString*) rawDecimalAsString;
-(NSString*) formatStringWithoutCurrency;
-(NSString*) formatStringShort:(BOOL) shortForm;
-(NSString*) currencyPrefixShort:(BOOL) shortForm;
- (NSComparisonResult)compare:(CurrencyAmount *)other;
- (BOOL) isZeroAmount;

@end
@interface CurrencyAmount : NSObject <NSCoding>
{
	 NSDecimalNumber *amount;
	 NSString *currencyID;
}

@property (nonatomic, retain) NSDecimalNumber *amount;
@property (nonatomic, retain) NSString *currencyID;
                                                         property
+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID;
- (id) initWithNode:(XMLNode *) node;
- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale;
- (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID;
- (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity;
- (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount;
-(NSString*) stringValue;
-(NSString*) rawDecimalAsString;
-(NSString*) formatStringWithoutCurrency;
-(NSString*) formatStringShort:(BOOL) shortForm;
-(NSString*) currencyPrefixShort:(BOOL) shortForm;
- (NSComparisonResult)compare:(CurrencyAmount *)other;
- (BOOL) isZeroAmount;

@end
@interface CurrencyAmount : NSObject <NSCoding>
{
	 NSDecimalNumber *amount;
	 NSString *currencyID;
}

@property (nonatomic, retain) NSDecimalNumber *amount;
@property (nonatomic, retain) NSString *currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID;
- (id) initWithNode:(XMLNode *) node;
- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale;
- (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID;
- (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity;
- (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount;
-(NSString*) stringValue;
-(NSString*) rawDecimalAsString;
-(NSString*) formatStringWithoutCurrency;
-(NSString*) formatStringShort:(BOOL) shortForm;
-(NSString*) currencyPrefixShort:(BOOL) shortForm;
- (NSComparisonResult)compare:(CurrencyAmount *)other;
- (BOOL) isZeroAmount;

@end
@interface CurrencyAmount : NSObject <NSCoding>
{
	 NSDecimalNumber *amount;
	 NSString *currencyID;
}

@property (nonatomic, retain) NSDecimalNumber *amount;
@property (nonatomic, retain) NSString *currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID;
- (id) initWithNode:(XMLNode *) node;
                                                                         class/static method
- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale;
- (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID;
- (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity;
- (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount;
-(NSString*) stringValue;
-(NSString*) rawDecimalAsString;
-(NSString*) formatStringWithoutCurrency;
-(NSString*) formatStringShort:(BOOL) shortForm;
-(NSString*) currencyPrefixShort:(BOOL) shortForm;
- (NSComparisonResult)compare:(CurrencyAmount *)other;
- (BOOL) isZeroAmount;

@end
@interface CurrencyAmount : NSObject <NSCoding>
{
	 NSDecimalNumber *amount;
	 NSString *currencyID;
}

@property (nonatomic, retain) NSDecimalNumber *amount;
@property (nonatomic, retain) NSString *currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID;
- (id) initWithNode:(XMLNode *) node;
- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale;
- (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID;
- (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity;
- (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount;
-(NSString*) stringValue;
-(NSString*) rawDecimalAsString;
-(NSString*) formatStringWithoutCurrency;
-(NSString*) formatStringShort:(BOOL) shortForm;
-(NSString*) currencyPrefixShort:(BOOL) shortForm;
- (NSComparisonResult)compare:(CurrencyAmount *)other;
- (BOOL) isZeroAmount;

@end
@interface CurrencyAmount : NSObject <NSCoding>
{
	 NSDecimalNumber *amount;
	 NSString *currencyID;
}

@property (nonatomic, retain) NSDecimalNumber *amount;
@property (nonatomic, retain) NSString *currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID;
                                                                         input parameter
- (id) initWithNode:(XMLNode *) node;
- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale;
- (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID;
- (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity;
- (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount;
-(NSString*) stringValue;
-(NSString*) rawDecimalAsString;
-(NSString*) formatStringWithoutCurrency;
-(NSString*) formatStringShort:(BOOL) shortForm;
-(NSString*) currencyPrefixShort:(BOOL) shortForm;
- (NSComparisonResult)compare:(CurrencyAmount *)other;
- (BOOL) isZeroAmount;

@end
@interface CurrencyAmount : NSObject <NSCoding>
{
	 NSDecimalNumber *amount;
	 NSString *currencyID;
}

@property (nonatomic, retain) NSDecimalNumber *amount;
@property (nonatomic, retain) NSString *currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID;
- (id) initWithNode:(XMLNode *) node;
- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale;
- (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID;
- (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity;
- (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount;
-(NSString*) stringValue;
-(NSString*) rawDecimalAsString;
-(NSString*) formatStringWithoutCurrency;
-(NSString*) formatStringShort:(BOOL) shortForm;
-(NSString*) currencyPrefixShort:(BOOL) shortForm;
- (NSComparisonResult)compare:(CurrencyAmount *)other;
- (BOOL) isZeroAmount;

@end
@interface CurrencyAmount : NSObject <NSCoding>
{
	 NSDecimalNumber *amount;
	 NSString *currencyID;
}

@property (nonatomic, retain) NSDecimalNumber *amount;


                    return type
@property (nonatomic, retain) NSString *currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID;
- (id) initWithNode:(XMLNode *) node;
- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale;
- (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID;
- (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity;
- (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount;
-(NSString*) stringValue;
-(NSString*) rawDecimalAsString;
-(NSString*) formatStringWithoutCurrency;
-(NSString*) formatStringShort:(BOOL) shortForm;
-(NSString*) currencyPrefixShort:(BOOL) shortForm;
- (NSComparisonResult)compare:(CurrencyAmount *)other;
- (BOOL) isZeroAmount;

@end
@interface CurrencyAmount : NSObject <NSCoding>
{
	 NSDecimalNumber *amount;
	 NSString *currencyID;
}

@property (nonatomic, retain) NSDecimalNumber *amount;
@property (nonatomic, retain) NSString *currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID;
- (id) initWithNode:(XMLNode *) node;
- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale;
- (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID;
- (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity;
- (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount;
-(NSString*) stringValue;
-(NSString*) rawDecimalAsString;
-(NSString*) formatStringWithoutCurrency;
-(NSString*) formatStringShort:(BOOL) shortForm;
-(NSString*) currencyPrefixShort:(BOOL) shortForm;
- (NSComparisonResult)compare:(CurrencyAmount *)other;
- (BOOL) isZeroAmount;

@end
@interface CurrencyAmount : NSObject <NSCoding>
{
	 NSDecimalNumber *amount;
	 NSString *currencyID;
}

@property (nonatomic, retain) NSDecimalNumber *amount;


                                          method name
@property (nonatomic, retain) NSString *currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID;
- (id) initWithNode:(XMLNode *) node;
- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale;
- (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID;
- (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity;
- (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount;
-(NSString*) stringValue;
-(NSString*) rawDecimalAsString;
-(NSString*) formatStringWithoutCurrency;
-(NSString*) formatStringShort:(BOOL) shortForm;
-(NSString*) currencyPrefixShort:(BOOL) shortForm;
- (NSComparisonResult)compare:(CurrencyAmount *)other;
- (BOOL) isZeroAmount;

@end
@interface CurrencyAmount : NSObject <NSCoding>
{
	 NSDecimalNumber *amount;
	 NSString *currencyID;
}

@property (nonatomic, retain) NSDecimalNumber *amount;
@property (nonatomic, retain) NSString *currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID;
- (id) initWithNode:(XMLNode *) node;
- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale;
- (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID;
- (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity;
- (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount;
-(NSString*) stringValue;
-(NSString*) rawDecimalAsString;
-(NSString*) formatStringWithoutCurrency;
-(NSString*) formatStringShort:(BOOL) shortForm;
-(NSString*) currencyPrefixShort:(BOOL) shortForm;
- (NSComparisonResult)compare:(CurrencyAmount *)other;
- (BOOL) isZeroAmount;

@end
@interface CurrencyAmount : NSObject <NSCoding>
{
	 NSDecimalNumber *amount;
	 NSString *currencyID;
}

@property (nonatomic, retain) NSDecimalNumber *amount;
@property (nonatomic, retain) NSString *currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID;
- (id) initWithNode:(XMLNode *) node;
                                     instance method
- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale;
- (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID;
- (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity;
- (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount;
-(NSString*) stringValue;
-(NSString*) rawDecimalAsString;
-(NSString*) formatStringWithoutCurrency;
-(NSString*) formatStringShort:(BOOL) shortForm;
-(NSString*) currencyPrefixShort:(BOOL) shortForm;
- (NSComparisonResult)compare:(CurrencyAmount *)other;
- (BOOL) isZeroAmount;

@end
@interface CurrencyAmount : NSObject <NSCoding>
{
	 NSDecimalNumber *amount;
	 NSString *currencyID;
}

@property (nonatomic, retain) NSDecimalNumber *amount;
@property (nonatomic, retain) NSString *currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID;
- (id) initWithNode:(XMLNode *) node;
- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale;
- (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID;
- (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity;
- (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount;
-(NSString*) stringValue;
-(NSString*) rawDecimalAsString;
-(NSString*) formatStringWithoutCurrency;
-(NSString*) formatStringShort:(BOOL) shortForm;
-(NSString*) currencyPrefixShort:(BOOL) shortForm;
- (NSComparisonResult)compare:(CurrencyAmount *)other;
- (BOOL) isZeroAmount;

@end
@interface CurrencyAmount : NSObject <NSCoding>
{
	 NSDecimalNumber *amount;
	 NSString *currencyID;
}

@property (nonatomic, retain) NSDecimalNumber *amount;
@property (nonatomic, retain) NSString *currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID;
- (id) initWithNode:(XMLNode *) node;

                            1st param
- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale;
- (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID;
- (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity;
- (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount;
-(NSString*) stringValue;
-(NSString*) rawDecimalAsString;
-(NSString*) formatStringWithoutCurrency;
-(NSString*) formatStringShort:(BOOL) shortForm;
-(NSString*) currencyPrefixShort:(BOOL) shortForm;
- (NSComparisonResult)compare:(CurrencyAmount *)other;
- (BOOL) isZeroAmount;

@end
@interface CurrencyAmount : NSObject <NSCoding>
{
	 NSDecimalNumber *amount;
	 NSString *currencyID;
}

@property (nonatomic, retain) NSDecimalNumber *amount;
@property (nonatomic, retain) NSString *currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID;
- (id) initWithNode:(XMLNode *) node;
- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale;
- (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID;
- (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity;
- (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount;
-(NSString*) stringValue;
-(NSString*) rawDecimalAsString;
-(NSString*) formatStringWithoutCurrency;
-(NSString*) formatStringShort:(BOOL) shortForm;
-(NSString*) currencyPrefixShort:(BOOL) shortForm;
- (NSComparisonResult)compare:(CurrencyAmount *)other;
- (BOOL) isZeroAmount;

@end
@interface CurrencyAmount : NSObject <NSCoding>
{
	 NSDecimalNumber *amount;
	 NSString *currencyID;
}

@property (nonatomic, retain) NSDecimalNumber *amount;
@property (nonatomic, retain) NSString *currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID;
- (id) initWithNode:(XMLNode *) node;

                                                             2nd param
- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale;
- (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID;
- (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity;
- (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount;
-(NSString*) stringValue;
-(NSString*) rawDecimalAsString;
-(NSString*) formatStringWithoutCurrency;
-(NSString*) formatStringShort:(BOOL) shortForm;
-(NSString*) currencyPrefixShort:(BOOL) shortForm;
- (NSComparisonResult)compare:(CurrencyAmount *)other;
- (BOOL) isZeroAmount;

@end
@interface CurrencyAmount : NSObject <NSCoding>
{
	 NSDecimalNumber *amount;
	 NSString *currencyID;
}

@property (nonatomic, retain) NSDecimalNumber *amount;
@property (nonatomic, retain) NSString *currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID;
- (id) initWithNode:(XMLNode *) node;
- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale;
- (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID;
- (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity;
- (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount;
-(NSString*) stringValue;
-(NSString*) rawDecimalAsString;
-(NSString*) formatStringWithoutCurrency;
-(NSString*) formatStringShort:(BOOL) shortForm;
-(NSString*) currencyPrefixShort:(BOOL) shortForm;
- (NSComparisonResult)compare:(CurrencyAmount *)other;
- (BOOL) isZeroAmount;

@end
@interface CurrencyAmount : NSObject <NSCoding>
{
	 NSDecimalNumber *amount;
	 NSString *currencyID;
}

@property (nonatomic, retain) NSDecimalNumber *amount;
@property (nonatomic, retain) NSString *currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID;
- (id) initWithNode:(XMLNode *) node;

                                                                                             3rd param
- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale;
- (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID;
- (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity;
- (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount;
-(NSString*) stringValue;
-(NSString*) rawDecimalAsString;
-(NSString*) formatStringWithoutCurrency;
-(NSString*) formatStringShort:(BOOL) shortForm;
-(NSString*) currencyPrefixShort:(BOOL) shortForm;
- (NSComparisonResult)compare:(CurrencyAmount *)other;
- (BOOL) isZeroAmount;

@end
@interface CurrencyAmount : NSObject <NSCoding>
{
	 NSDecimalNumber *amount;
	 NSString *currencyID;
}

@property (nonatomic, retain) NSDecimalNumber *amount;
@property (nonatomic, retain) NSString *currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID;
- (id) initWithNode:(XMLNode *) node;
- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale;
- (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID;
- (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity;
- (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount;
-(NSString*) stringValue;
-(NSString*) rawDecimalAsString;
-(NSString*) formatStringWithoutCurrency;
-(NSString*) formatStringShort:(BOOL) shortForm;
-(NSString*) currencyPrefixShort:(BOOL) shortForm;
- (NSComparisonResult)compare:(CurrencyAmount *)other;
- (BOOL) isZeroAmount;

@end
@interface CurrencyAmount : NSObject <NSCoding>
{
	 NSDecimalNumber *amount;
	 NSString *currencyID;
}

@property (nonatomic, retain) NSDecimalNumber *amount;
@property (nonatomic, retain) NSString *currencyID;



                                            method name
+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID;
- (id) initWithNode:(XMLNode *) node;
- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale;
- (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID;
- (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity;
- (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount;
-(NSString*) stringValue;
-(NSString*) rawDecimalAsString;
-(NSString*) formatStringWithoutCurrency;
-(NSString*) formatStringShort:(BOOL) shortForm;
-(NSString*) currencyPrefixShort:(BOOL) shortForm;
- (NSComparisonResult)compare:(CurrencyAmount *)other;
- (BOOL) isZeroAmount;

@end
@interface CurrencyAmount : NSObject <NSCoding>
{
	 NSDecimalNumber *amount;
	 NSString *currencyID;
}

@property (nonatomic, retain) NSDecimalNumber *amount;
@property (nonatomic, retain) NSString *currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID;
- (id) initWithNode:(XMLNode *) node;
- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale;
- (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID;
- (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID;
- (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity;
- (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount;
-(NSString*) stringValue;
-(NSString*) rawDecimalAsString;
-(NSString*) formatStringWithoutCurrency;
-(NSString*) formatStringShort:(BOOL) shortForm;
-(NSString*) currencyPrefixShort:(BOOL) shortForm;
- (NSComparisonResult)compare:(CurrencyAmount *)other;
- (BOOL) isZeroAmount;

@end
@implementation CurrencyAmount

@synthesize amount;
@synthesize currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID
{
	 return [[[CurrencyAmount alloc] initWithDoubleAmount:0.0 currencyID:inCurrencyID] autorelease];
}

- (id) initWithNode:(XMLNode *) node
{
	 NSString *inCurrencyID = [node attributeValue:@"currencyID"];
	 [self initWithStringAmount:[node getText] currencyID:inCurrencyID];
	 return self;
}

- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID
{
	 amount = [[NSDecimalNumber alloc] initWithDouble:inAmount];
	 self.currencyID = inCurrencyID;
	 return self;
}

- (BOOL) isZeroAmount
{
	 return [amount compare:[NSDecimalNumber zero]] == NSOrderedSame;
}

- (void) dealloc
{
	 [amount release];
	 [currencyID release];
	 [super dealloc];
}

@end
@implementation CurrencyAmount   implementation of interface
@synthesize amount;
@synthesize currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID
{
	 return [[[CurrencyAmount alloc] initWithDoubleAmount:0.0 currencyID:inCurrencyID] autorelease];
}

- (id) initWithNode:(XMLNode *) node
{
	 NSString *inCurrencyID = [node attributeValue:@"currencyID"];
	 [self initWithStringAmount:[node getText] currencyID:inCurrencyID];
	 return self;
}

- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID
{
	 amount = [[NSDecimalNumber alloc] initWithDouble:inAmount];
	 self.currencyID = inCurrencyID;
	 return self;
}

- (BOOL) isZeroAmount
{
	 return [amount compare:[NSDecimalNumber zero]] == NSOrderedSame;
}

- (void) dealloc
{
	 [amount release];
	 [currencyID release];
	 [super dealloc];
}

@end
@implementation CurrencyAmount

@synthesize amount;
@synthesize currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID
{
	 return [[[CurrencyAmount alloc] initWithDoubleAmount:0.0 currencyID:inCurrencyID] autorelease];
}

- (id) initWithNode:(XMLNode *) node
{
	 NSString *inCurrencyID = [node attributeValue:@"currencyID"];
	 [self initWithStringAmount:[node getText] currencyID:inCurrencyID];
	 return self;
}

- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID
{
	 amount = [[NSDecimalNumber alloc] initWithDouble:inAmount];
	 self.currencyID = inCurrencyID;
	 return self;
}

- (BOOL) isZeroAmount
{
	 return [amount compare:[NSDecimalNumber zero]] == NSOrderedSame;
}

- (void) dealloc
{
	 [amount release];
	 [currencyID release];
	 [super dealloc];
}

@end
@implementation CurrencyAmount

@synthesize amount;  macro getter/setter
@synthesize currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID
{
	 return [[[CurrencyAmount alloc] initWithDoubleAmount:0.0 currencyID:inCurrencyID] autorelease];
}

- (id) initWithNode:(XMLNode *) node
{
	 NSString *inCurrencyID = [node attributeValue:@"currencyID"];
	 [self initWithStringAmount:[node getText] currencyID:inCurrencyID];
	 return self;
}

- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID
{
	 amount = [[NSDecimalNumber alloc] initWithDouble:inAmount];
	 self.currencyID = inCurrencyID;
	 return self;
}

- (BOOL) isZeroAmount
{
	 return [amount compare:[NSDecimalNumber zero]] == NSOrderedSame;
}

- (void) dealloc
{
	 [amount release];
	 [currencyID release];
	 [super dealloc];
}

@end
@implementation CurrencyAmount

@synthesize amount;
@synthesize currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID
{
	 return [[[CurrencyAmount alloc] initWithDoubleAmount:0.0 currencyID:inCurrencyID] autorelease];
}

- (id) initWithNode:(XMLNode *) node
{
	 NSString *inCurrencyID = [node attributeValue:@"currencyID"];
	 [self initWithStringAmount:[node getText] currencyID:inCurrencyID];
	 return self;
}

- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID
{
	 amount = [[NSDecimalNumber alloc] initWithDouble:inAmount];
	 self.currencyID = inCurrencyID;
	 return self;
}

- (BOOL) isZeroAmount
{
	 return [amount compare:[NSDecimalNumber zero]] == NSOrderedSame;
}

- (void) dealloc
{
	 [amount release];
	 [currencyID release];
	 [super dealloc];
}

@end
@implementation CurrencyAmount

@synthesize amount;
@synthesize currencyID;
                            method implementations
+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID
{
	 return [[[CurrencyAmount alloc] initWithDoubleAmount:0.0 currencyID:inCurrencyID] autorelease];
}

- (id) initWithNode:(XMLNode *) node
{
	 NSString *inCurrencyID = [node attributeValue:@"currencyID"];
	 [self initWithStringAmount:[node getText] currencyID:inCurrencyID];
	 return self;
}

- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID
{
	 amount = [[NSDecimalNumber alloc] initWithDouble:inAmount];
	 self.currencyID = inCurrencyID;
	 return self;
}

- (BOOL) isZeroAmount
{
	 return [amount compare:[NSDecimalNumber zero]] == NSOrderedSame;
}

- (void) dealloc
{
	 [amount release];
	 [currencyID release];
	 [super dealloc];
}

@end
@implementation CurrencyAmount

@synthesize amount;
@synthesize currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID
{
	 return [[[CurrencyAmount alloc] initWithDoubleAmount:0.0 currencyID:inCurrencyID] autorelease];
}

- (id) initWithNode:(XMLNode *) node
{
	 NSString *inCurrencyID = [node attributeValue:@"currencyID"];
	 [self initWithStringAmount:[node getText] currencyID:inCurrencyID];
	 return self;
}

- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID
{
	 amount = [[NSDecimalNumber alloc] initWithDouble:inAmount];
	 self.currencyID = inCurrencyID;
	 return self;
}

- (BOOL) isZeroAmount
{
	 return [amount compare:[NSDecimalNumber zero]] == NSOrderedSame;
}

- (void) dealloc
{
	 [amount release];
	 [currencyID release];
	 [super dealloc];
}

@end
@implementation CurrencyAmount

@synthesize amount;
@synthesize currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID
{
	 return [[[CurrencyAmount alloc] initWithDoubleAmount:0.0 currencyID:inCurrencyID] autorelease];
}


                             method invocation
- (id) initWithNode:(XMLNode *) node
{
	 NSString *inCurrencyID = [node attributeValue:@"currencyID"];
	 [self initWithStringAmount:[node getText] currencyID:inCurrencyID];
	 return self;
}

- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID
{
	 amount = [[NSDecimalNumber alloc] initWithDouble:inAmount];
	 self.currencyID = inCurrencyID;
	 return self;
}

- (BOOL) isZeroAmount
{
	 return [amount compare:[NSDecimalNumber zero]] == NSOrderedSame;
}

- (void) dealloc
{
	 [amount release];
	 [currencyID release];
	 [super dealloc];
}

@end
@implementation CurrencyAmount

@synthesize amount;
@synthesize currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID
{
	 return [[[CurrencyAmount alloc] initWithDoubleAmount:0.0 currencyID:inCurrencyID] autorelease];
}

- (id) initWithNode:(XMLNode *) node
{
	 NSString *inCurrencyID = [node attributeValue:@"currencyID"];
	 [self initWithStringAmount:[node getText] currencyID:inCurrencyID];
	 return self;
}

- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID
{
	 amount = [[NSDecimalNumber alloc] initWithDouble:inAmount];
	 self.currencyID = inCurrencyID;
	 return self;
}

- (BOOL) isZeroAmount
{
	 return [amount compare:[NSDecimalNumber zero]] == NSOrderedSame;
}

- (void) dealloc
{
	 [amount release];
	 [currencyID release];
	 [super dealloc];
}

@end
@implementation CurrencyAmount

@synthesize amount;
@synthesize currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID
{
	 return [[[CurrencyAmount alloc] initWithDoubleAmount:0.0 currencyID:inCurrencyID] autorelease];
}

- (id) initWithNode:(XMLNode *) node
{
	 NSString *inCurrencyID = [node attributeValue:@"currencyID"];string literal
	 [self initWithStringAmount:[node getText] currencyID:inCurrencyID];
	 return self;
}

- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID
{
	 amount = [[NSDecimalNumber alloc] initWithDouble:inAmount];
	 self.currencyID = inCurrencyID;
	 return self;
}

- (BOOL) isZeroAmount
{
	 return [amount compare:[NSDecimalNumber zero]] == NSOrderedSame;
}

- (void) dealloc
{
	 [amount release];
	 [currencyID release];
	 [super dealloc];
}

@end
@implementation CurrencyAmount

@synthesize amount;
@synthesize currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID
{
	 return [[[CurrencyAmount alloc] initWithDoubleAmount:0.0 currencyID:inCurrencyID] autorelease];
}

- (id) initWithNode:(XMLNode *) node
{
	 NSString *inCurrencyID = [node attributeValue:@"currencyID"];
	 [self initWithStringAmount:[node getText] currencyID:inCurrencyID];
	 return self;
}

- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID
{
	 amount = [[NSDecimalNumber alloc] initWithDouble:inAmount];
	 self.currencyID = inCurrencyID;
	 return self;
}

- (BOOL) isZeroAmount
{
	 return [amount compare:[NSDecimalNumber zero]] == NSOrderedSame;
}

- (void) dealloc
{
	 [amount release];
	 [currencyID release];
	 [super dealloc];
}

@end
@implementation CurrencyAmount

@synthesize amount;
@synthesize currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID
{
	 return [[[CurrencyAmount alloc] initWithDoubleAmount:0.0 currencyID:inCurrencyID] autorelease];
}

- (id) initWithNode:(XMLNode *) node
{
	 NSString *inCurrencyID = [node attributeValue:@"currencyID"];
	 [self initWithStringAmount:[node getText] currencyID:inCurrencyID];
	 return self;
}
                                  nested call
- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID
{
	 amount = [[NSDecimalNumber alloc] initWithDouble:inAmount];
	 self.currencyID = inCurrencyID;
	 return self;
}

- (BOOL) isZeroAmount
{
	 return [amount compare:[NSDecimalNumber zero]] == NSOrderedSame;
}

- (void) dealloc
{
	 [amount release];
	 [currencyID release];
	 [super dealloc];
}

@end
@implementation CurrencyAmount

@synthesize amount;
@synthesize currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID
{
	 return [[[CurrencyAmount alloc] initWithDoubleAmount:0.0 currencyID:inCurrencyID] autorelease];
}

- (id) initWithNode:(XMLNode *) node
{
	 NSString *inCurrencyID = [node attributeValue:@"currencyID"];
	 [self initWithStringAmount:[node getText] currencyID:inCurrencyID];
	 return self;
}

- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID
{
	 amount = [[NSDecimalNumber alloc] initWithDouble:inAmount];
	 self.currencyID = inCurrencyID;
	 return self;
}

- (BOOL) isZeroAmount
{
	 return [amount compare:[NSDecimalNumber zero]] == NSOrderedSame;
}

- (void) dealloc
{
	 [amount release];
	 [currencyID release];
	 [super dealloc];
}

@end
@implementation CurrencyAmount

@synthesize amount;
@synthesize currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID
{
	 return [[[CurrencyAmount alloc] initWithDoubleAmount:0.0 currencyID:inCurrencyID] autorelease];
}

- (id) initWithNode:(XMLNode *) node
{
	 NSString *inCurrencyID = [node attributeValue:@"currencyID"];
	 [self initWithStringAmount:[node getText] currencyID:inCurrencyID];

this instance
	 return self;
}

- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID
{
	 amount = [[NSDecimalNumber alloc] initWithDouble:inAmount];
	 self.currencyID = inCurrencyID;
	 return self;
}

- (BOOL) isZeroAmount
{
	 return [amount compare:[NSDecimalNumber zero]] == NSOrderedSame;
}

- (void) dealloc
{
	 [amount release];
	 [currencyID release];
	 [super dealloc];
}

@end
@implementation CurrencyAmount

@synthesize amount;
@synthesize currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID
{
	 return [[[CurrencyAmount alloc] initWithDoubleAmount:0.0 currencyID:inCurrencyID] autorelease];
}

- (id) initWithNode:(XMLNode *) node
{
	 NSString *inCurrencyID = [node attributeValue:@"currencyID"];
	 [self initWithStringAmount:[node getText] currencyID:inCurrencyID];
	 return self;
}

- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID
{
	 amount = [[NSDecimalNumber alloc] initWithDouble:inAmount];
	 self.currencyID = inCurrencyID;
	 return self;
}

- (BOOL) isZeroAmount
{
	 return [amount compare:[NSDecimalNumber zero]] == NSOrderedSame;
}

- (void) dealloc
{
	 [amount release];
	 [currencyID release];
	 [super dealloc];
}

@end
@implementation CurrencyAmount

@synthesize amount;
@synthesize currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID
{
	 return [[[CurrencyAmount alloc] initWithDoubleAmount:0.0 currencyID:inCurrencyID] autorelease];
}

- (id) initWithNode:(XMLNode *) node
{
	 NSString *inCurrencyID = [node attributeValue:@"currencyID"];
	 [self initWithStringAmount:[node getText] currencyID:inCurrencyID];
	 return self;
}

- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID
{
	 amount = [[NSDecimalNumber alloc] initWithDouble:inAmount];
	 self.currencyID = inCurrencyID;
	 return self;
}

- (BOOL) isZeroAmount
{
	 return [amount compare:[NSDecimalNumber zero]] == NSOrderedSame;
}

- (void) dealloc
{
                  override superclass
	 [amount release];
	 [currencyID release];
	 [super dealloc];
}

@end
@implementation CurrencyAmount

@synthesize amount;
@synthesize currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID
{
	 return [[[CurrencyAmount alloc] initWithDoubleAmount:0.0 currencyID:inCurrencyID] autorelease];
}

- (id) initWithNode:(XMLNode *) node
{
	 NSString *inCurrencyID = [node attributeValue:@"currencyID"];
	 [self initWithStringAmount:[node getText] currencyID:inCurrencyID];
	 return self;
}

- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID
{
	 amount = [[NSDecimalNumber alloc] initWithDouble:inAmount];
	 self.currencyID = inCurrencyID;
	 return self;
}

- (BOOL) isZeroAmount
{
	 return [amount compare:[NSDecimalNumber zero]] == NSOrderedSame;
}

- (void) dealloc
{
	 [amount release];
	 [currencyID release];
	 [super dealloc];
}

@end
@implementation CurrencyAmount

@synthesize amount;
@synthesize currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID
{
	 return [[[CurrencyAmount alloc] initWithDoubleAmount:0.0 currencyID:inCurrencyID] autorelease];
}

- (id) initWithNode:(XMLNode *) node
{
	 NSString *inCurrencyID = [node attributeValue:@"currencyID"];
	 [self initWithStringAmount:[node getText] currencyID:inCurrencyID];
	 return self;
}

- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID
{
	 amount = [[NSDecimalNumber alloc] initWithDouble:inAmount];
	 self.currencyID = inCurrencyID;
	 return self;
}

- (BOOL) isZeroAmount
{
	 return [amount compare:[NSDecimalNumber zero]] == NSOrderedSame;
}

- (void) dealloc
{

                          memory mangement
	 [amount release];
	 [currencyID release];
	 [super dealloc];
}

@end
@implementation CurrencyAmount

@synthesize amount;
@synthesize currencyID;

+ (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID
{
	 return [[[CurrencyAmount alloc] initWithDoubleAmount:0.0 currencyID:inCurrencyID] autorelease];
}

- (id) initWithNode:(XMLNode *) node
{
	 NSString *inCurrencyID = [node attributeValue:@"currencyID"];
	 [self initWithStringAmount:[node getText] currencyID:inCurrencyID];
	 return self;
}

- (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID
{
	 amount = [[NSDecimalNumber alloc] initWithDouble:inAmount];
	 self.currencyID = inCurrencyID;
	 return self;
}

- (BOOL) isZeroAmount
{
	 return [amount compare:[NSDecimalNumber zero]] == NSOrderedSame;
}

- (void) dealloc
{
	 [amount release];
	 [currencyID release];
	 [super dealloc];
}

@end
Tools
XCode


•   Full featured IDE

    •   Build, debug

    •   Code navigation, completion

    •   Refactoring

    •   SCM Integration

    •   Wizards
Interface Builder



•   Drag-and-drop, UI Design Tool

•   Integrated with XCode

    •   Connect code to UI elements
        (events)
Instruments


•   Profiling Tool

•   Memory Usage

    •   Leaks

•   CPU Usage

•   Threads, I/O Monitoring
iPhone Emulator




Runs application natively
Not all APIs available
Some APIs mocked: Location
Cocoa Touch


•   MVC Framework

    •   AppKit

        •   Controls, Events

    •   UIKit

        •   Accelerometer, Multi-touch
Dangers
Garbage
Don’t Call Me...




Push Notifications = Substitute for
Background Processing?
App 2 App




No formal intra-application
communication allowed
Custom URL protocols used as hack
QA?




Manual provisioning: 100 iPhone
Android

•   Devices, devices, devices

•   Open Source: OS, SDK

•   Language: Java+

•   Features: Multi-threaded, Open GL
    ES, Contacts, Email, WebKit, Media,
    GPS, Google Maps, (Video)Camera,
    Local Database, Background
    Service, Garbage Collection, Intents

•   Pitfalls: Memory Management,
    Assault on Battery, Devices,
    Devices, Devices...
Compiler                Dex Compiler              Compress




Source Code              Class files                  Dex File              APK
Java
Tools
Tools
DDMS
Android Runtime & App Framework

•   Activities & Intents                 •   Separation of Concerns

    •   Launch an Activity based on an       •   Layout
        Intent
                                             •   Application Logic
    •   Application Interop

•   XML => Bytecode

    •   Layout

    •   Localization
The Web
Services Diet



Web Services: Made for Servers, not
Phones
Data Centric vs. Functional Centric
Mo’ Data, Mo’ Problems
XML = Teh Suck
Try Not to
Drown


•Images, Audio, Video
•Browser features
taken for granted
•Caching / Cache
Management
•Simultaneous
Loading
Security


•   What to store on device?

•   What about stolen devices?

•   Jailbreaking?

•   Phishing?

    •   OAuth???

•   Hard coding == FAIL
Upgrades? What Upgrades?


•   Far from automatic

•   Out of sight, out of mind

    •   Don’t expect upgrades

•   Lots of versions to manage

    •   Agile Development FTW???
eb
        le W
     b i
Mo
Mobile Web a.k.a. HTML 5

•   One app to rule them all: iPhone,
    Android, webOS, Blackberry*

•   Language: JavaScript, HTML, CSS

•   Tools: ...

•   Features: Multi-threaded!, Open GL
    ES, Contacts, Email, GPS, Maps,
    (Video)Camera, Local Database,
    Media, Memory Management,
    Security

•   Pitfalls: Memory management, no
    background processing, WebKit
    versioning
Resources
•   iPhone Developer Center

•   Silicon Valley iPhone Developers

•   Stack Overflow

•   MOTODEV

•   Android Developers

•   Silicon Valley Android Developers

•   Android Developers Group
Sprint Developer Conference


•   October 26-28

•   Santa Clara Convention Center

•   Android, Mobile Web, webOS, RIM, J2ME, WinMo

•   Coding Camps

    •   Free HTC Hero (Android)

•   4G Demo and Beta

Mobile Development 101

  • 1.
    Mobile Development 101:Developing Apps for the iPhone and the Android Platforms Michael Galpin, eBay @michaelg
  • 2.
  • 3.
    Mobile Transactions 30.0 22.5 $M 15.0 7.5 0 Jan 1, 2008 May 1, 2008 Aug 1, 2008 Oct 1, 2008 Dec 1, 2008 Feb 1, 2009 Apr 1, 2009 Jun 1, 2009 Mobile Web iPhone
  • 5.
  • 6.
    Usage Capabilities Phones That Matter Distribution Barriers
  • 7.
  • 9.
    iPhone 50% of MobileInternet Usage Comprehensive Tools High Volume Distribution Channel
  • 10.
    Overview • Programming Language: Objective-C • Tools: XCode/Interface Builder, iPhone SDK • Framework: Cocoa Touch • Features: Multi-threaded, Open GL ES, Contacts, Email, WebKit, iTunes, GPS, Google Maps, (Video)Camera, Local Database, Push Notifications • Pitfalls: Memory management, no background processing, no intra-application communication*, QA, App Store regulations
  • 11.
    Objective-C • Derived and compatible with C • C libraries in many cases • Object-oriented • Smalltalk inspired • Surprisingly dynamic
  • 12.
    @interface CurrencyAmount :NSObject <NSCoding> { NSDecimalNumber *amount; NSString *currencyID; } @property (nonatomic, retain) NSDecimalNumber *amount; @property (nonatomic, retain) NSString *currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID; - (id) initWithNode:(XMLNode *) node; - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale; - (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID; - (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity; - (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount; -(NSString*) stringValue; -(NSString*) rawDecimalAsString; -(NSString*) formatStringWithoutCurrency; -(NSString*) formatStringShort:(BOOL) shortForm; -(NSString*) currencyPrefixShort:(BOOL) shortForm; - (NSComparisonResult)compare:(CurrencyAmount *)other; - (BOOL) isZeroAmount; @end
  • 13.
    interface(header) @interface CurrencyAmount :NSObject <NSCoding> { NSDecimalNumber *amount; NSString *currencyID; } @property (nonatomic, retain) NSDecimalNumber *amount; @property (nonatomic, retain) NSString *currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID; - (id) initWithNode:(XMLNode *) node; - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale; - (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID; - (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity; - (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount; -(NSString*) stringValue; -(NSString*) rawDecimalAsString; -(NSString*) formatStringWithoutCurrency; -(NSString*) formatStringShort:(BOOL) shortForm; -(NSString*) currencyPrefixShort:(BOOL) shortForm; - (NSComparisonResult)compare:(CurrencyAmount *)other; - (BOOL) isZeroAmount; @end
  • 14.
    @interface CurrencyAmount :NSObject <NSCoding> { NSDecimalNumber *amount; NSString *currencyID; } @property (nonatomic, retain) NSDecimalNumber *amount; @property (nonatomic, retain) NSString *currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID; - (id) initWithNode:(XMLNode *) node; - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale; - (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID; - (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity; - (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount; -(NSString*) stringValue; -(NSString*) rawDecimalAsString; -(NSString*) formatStringWithoutCurrency; -(NSString*) formatStringShort:(BOOL) shortForm; -(NSString*) currencyPrefixShort:(BOOL) shortForm; - (NSComparisonResult)compare:(CurrencyAmount *)other; - (BOOL) isZeroAmount; @end
  • 15.
    inheritance @interface CurrencyAmount :NSObject <NSCoding> { NSDecimalNumber *amount; NSString *currencyID; } @property (nonatomic, retain) NSDecimalNumber *amount; @property (nonatomic, retain) NSString *currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID; - (id) initWithNode:(XMLNode *) node; - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale; - (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID; - (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity; - (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount; -(NSString*) stringValue; -(NSString*) rawDecimalAsString; -(NSString*) formatStringWithoutCurrency; -(NSString*) formatStringShort:(BOOL) shortForm; -(NSString*) currencyPrefixShort:(BOOL) shortForm; - (NSComparisonResult)compare:(CurrencyAmount *)other; - (BOOL) isZeroAmount; @end
  • 16.
    @interface CurrencyAmount :NSObject <NSCoding> { NSDecimalNumber *amount; NSString *currencyID; } @property (nonatomic, retain) NSDecimalNumber *amount; @property (nonatomic, retain) NSString *currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID; - (id) initWithNode:(XMLNode *) node; - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale; - (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID; - (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity; - (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount; -(NSString*) stringValue; -(NSString*) rawDecimalAsString; -(NSString*) formatStringWithoutCurrency; -(NSString*) formatStringShort:(BOOL) shortForm; -(NSString*) currencyPrefixShort:(BOOL) shortForm; - (NSComparisonResult)compare:(CurrencyAmount *)other; - (BOOL) isZeroAmount; @end
  • 17.
    protocol @interface CurrencyAmount :NSObject <NSCoding> { NSDecimalNumber *amount; NSString *currencyID; } @property (nonatomic, retain) NSDecimalNumber *amount; @property (nonatomic, retain) NSString *currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID; - (id) initWithNode:(XMLNode *) node; - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale; - (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID; - (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity; - (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount; -(NSString*) stringValue; -(NSString*) rawDecimalAsString; -(NSString*) formatStringWithoutCurrency; -(NSString*) formatStringShort:(BOOL) shortForm; -(NSString*) currencyPrefixShort:(BOOL) shortForm; - (NSComparisonResult)compare:(CurrencyAmount *)other; - (BOOL) isZeroAmount; @end
  • 18.
    @interface CurrencyAmount :NSObject <NSCoding> { NSDecimalNumber *amount; NSString *currencyID; } @property (nonatomic, retain) NSDecimalNumber *amount; @property (nonatomic, retain) NSString *currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID; - (id) initWithNode:(XMLNode *) node; - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale; - (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID; - (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity; - (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount; -(NSString*) stringValue; -(NSString*) rawDecimalAsString; -(NSString*) formatStringWithoutCurrency; -(NSString*) formatStringShort:(BOOL) shortForm; -(NSString*) currencyPrefixShort:(BOOL) shortForm; - (NSComparisonResult)compare:(CurrencyAmount *)other; - (BOOL) isZeroAmount; @end
  • 19.
    @interface CurrencyAmount :NSObject <NSCoding> { NSDecimalNumber *amount; NSString *currencyID; instance variable } @property (nonatomic, retain) NSDecimalNumber *amount; @property (nonatomic, retain) NSString *currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID; - (id) initWithNode:(XMLNode *) node; - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale; - (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID; - (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity; - (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount; -(NSString*) stringValue; -(NSString*) rawDecimalAsString; -(NSString*) formatStringWithoutCurrency; -(NSString*) formatStringShort:(BOOL) shortForm; -(NSString*) currencyPrefixShort:(BOOL) shortForm; - (NSComparisonResult)compare:(CurrencyAmount *)other; - (BOOL) isZeroAmount; @end
  • 20.
    @interface CurrencyAmount :NSObject <NSCoding> { NSDecimalNumber *amount; NSString *currencyID; } @property (nonatomic, retain) NSDecimalNumber *amount; @property (nonatomic, retain) NSString *currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID; - (id) initWithNode:(XMLNode *) node; - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale; - (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID; - (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity; - (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount; -(NSString*) stringValue; -(NSString*) rawDecimalAsString; -(NSString*) formatStringWithoutCurrency; -(NSString*) formatStringShort:(BOOL) shortForm; -(NSString*) currencyPrefixShort:(BOOL) shortForm; - (NSComparisonResult)compare:(CurrencyAmount *)other; - (BOOL) isZeroAmount; @end
  • 21.
    @interface CurrencyAmount :NSObject <NSCoding> { NSDecimalNumber *amount; NSString *currencyID; } method declarations @property (nonatomic, retain) NSDecimalNumber *amount; @property (nonatomic, retain) NSString *currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID; - (id) initWithNode:(XMLNode *) node; - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale; - (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID; - (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity; - (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount; -(NSString*) stringValue; -(NSString*) rawDecimalAsString; -(NSString*) formatStringWithoutCurrency; -(NSString*) formatStringShort:(BOOL) shortForm; -(NSString*) currencyPrefixShort:(BOOL) shortForm; - (NSComparisonResult)compare:(CurrencyAmount *)other; - (BOOL) isZeroAmount; @end
  • 22.
    @interface CurrencyAmount :NSObject <NSCoding> { NSDecimalNumber *amount; NSString *currencyID; } @property (nonatomic, retain) NSDecimalNumber *amount; @property (nonatomic, retain) NSString *currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID; - (id) initWithNode:(XMLNode *) node; - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale; - (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID; - (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity; - (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount; -(NSString*) stringValue; -(NSString*) rawDecimalAsString; -(NSString*) formatStringWithoutCurrency; -(NSString*) formatStringShort:(BOOL) shortForm; -(NSString*) currencyPrefixShort:(BOOL) shortForm; - (NSComparisonResult)compare:(CurrencyAmount *)other; - (BOOL) isZeroAmount; @end
  • 23.
    @interface CurrencyAmount :NSObject <NSCoding> { NSDecimalNumber *amount; NSString *currencyID; } @property (nonatomic, retain) NSDecimalNumber *amount; @property (nonatomic, retain) NSString *currencyID; property + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID; - (id) initWithNode:(XMLNode *) node; - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale; - (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID; - (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity; - (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount; -(NSString*) stringValue; -(NSString*) rawDecimalAsString; -(NSString*) formatStringWithoutCurrency; -(NSString*) formatStringShort:(BOOL) shortForm; -(NSString*) currencyPrefixShort:(BOOL) shortForm; - (NSComparisonResult)compare:(CurrencyAmount *)other; - (BOOL) isZeroAmount; @end
  • 24.
    @interface CurrencyAmount :NSObject <NSCoding> { NSDecimalNumber *amount; NSString *currencyID; } @property (nonatomic, retain) NSDecimalNumber *amount; @property (nonatomic, retain) NSString *currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID; - (id) initWithNode:(XMLNode *) node; - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale; - (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID; - (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity; - (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount; -(NSString*) stringValue; -(NSString*) rawDecimalAsString; -(NSString*) formatStringWithoutCurrency; -(NSString*) formatStringShort:(BOOL) shortForm; -(NSString*) currencyPrefixShort:(BOOL) shortForm; - (NSComparisonResult)compare:(CurrencyAmount *)other; - (BOOL) isZeroAmount; @end
  • 25.
    @interface CurrencyAmount :NSObject <NSCoding> { NSDecimalNumber *amount; NSString *currencyID; } @property (nonatomic, retain) NSDecimalNumber *amount; @property (nonatomic, retain) NSString *currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID; - (id) initWithNode:(XMLNode *) node; class/static method - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale; - (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID; - (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity; - (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount; -(NSString*) stringValue; -(NSString*) rawDecimalAsString; -(NSString*) formatStringWithoutCurrency; -(NSString*) formatStringShort:(BOOL) shortForm; -(NSString*) currencyPrefixShort:(BOOL) shortForm; - (NSComparisonResult)compare:(CurrencyAmount *)other; - (BOOL) isZeroAmount; @end
  • 26.
    @interface CurrencyAmount :NSObject <NSCoding> { NSDecimalNumber *amount; NSString *currencyID; } @property (nonatomic, retain) NSDecimalNumber *amount; @property (nonatomic, retain) NSString *currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID; - (id) initWithNode:(XMLNode *) node; - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale; - (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID; - (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity; - (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount; -(NSString*) stringValue; -(NSString*) rawDecimalAsString; -(NSString*) formatStringWithoutCurrency; -(NSString*) formatStringShort:(BOOL) shortForm; -(NSString*) currencyPrefixShort:(BOOL) shortForm; - (NSComparisonResult)compare:(CurrencyAmount *)other; - (BOOL) isZeroAmount; @end
  • 27.
    @interface CurrencyAmount :NSObject <NSCoding> { NSDecimalNumber *amount; NSString *currencyID; } @property (nonatomic, retain) NSDecimalNumber *amount; @property (nonatomic, retain) NSString *currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID; input parameter - (id) initWithNode:(XMLNode *) node; - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale; - (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID; - (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity; - (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount; -(NSString*) stringValue; -(NSString*) rawDecimalAsString; -(NSString*) formatStringWithoutCurrency; -(NSString*) formatStringShort:(BOOL) shortForm; -(NSString*) currencyPrefixShort:(BOOL) shortForm; - (NSComparisonResult)compare:(CurrencyAmount *)other; - (BOOL) isZeroAmount; @end
  • 28.
    @interface CurrencyAmount :NSObject <NSCoding> { NSDecimalNumber *amount; NSString *currencyID; } @property (nonatomic, retain) NSDecimalNumber *amount; @property (nonatomic, retain) NSString *currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID; - (id) initWithNode:(XMLNode *) node; - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale; - (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID; - (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity; - (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount; -(NSString*) stringValue; -(NSString*) rawDecimalAsString; -(NSString*) formatStringWithoutCurrency; -(NSString*) formatStringShort:(BOOL) shortForm; -(NSString*) currencyPrefixShort:(BOOL) shortForm; - (NSComparisonResult)compare:(CurrencyAmount *)other; - (BOOL) isZeroAmount; @end
  • 29.
    @interface CurrencyAmount :NSObject <NSCoding> { NSDecimalNumber *amount; NSString *currencyID; } @property (nonatomic, retain) NSDecimalNumber *amount; return type @property (nonatomic, retain) NSString *currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID; - (id) initWithNode:(XMLNode *) node; - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale; - (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID; - (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity; - (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount; -(NSString*) stringValue; -(NSString*) rawDecimalAsString; -(NSString*) formatStringWithoutCurrency; -(NSString*) formatStringShort:(BOOL) shortForm; -(NSString*) currencyPrefixShort:(BOOL) shortForm; - (NSComparisonResult)compare:(CurrencyAmount *)other; - (BOOL) isZeroAmount; @end
  • 30.
    @interface CurrencyAmount :NSObject <NSCoding> { NSDecimalNumber *amount; NSString *currencyID; } @property (nonatomic, retain) NSDecimalNumber *amount; @property (nonatomic, retain) NSString *currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID; - (id) initWithNode:(XMLNode *) node; - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale; - (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID; - (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity; - (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount; -(NSString*) stringValue; -(NSString*) rawDecimalAsString; -(NSString*) formatStringWithoutCurrency; -(NSString*) formatStringShort:(BOOL) shortForm; -(NSString*) currencyPrefixShort:(BOOL) shortForm; - (NSComparisonResult)compare:(CurrencyAmount *)other; - (BOOL) isZeroAmount; @end
  • 31.
    @interface CurrencyAmount :NSObject <NSCoding> { NSDecimalNumber *amount; NSString *currencyID; } @property (nonatomic, retain) NSDecimalNumber *amount; method name @property (nonatomic, retain) NSString *currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID; - (id) initWithNode:(XMLNode *) node; - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale; - (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID; - (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity; - (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount; -(NSString*) stringValue; -(NSString*) rawDecimalAsString; -(NSString*) formatStringWithoutCurrency; -(NSString*) formatStringShort:(BOOL) shortForm; -(NSString*) currencyPrefixShort:(BOOL) shortForm; - (NSComparisonResult)compare:(CurrencyAmount *)other; - (BOOL) isZeroAmount; @end
  • 32.
    @interface CurrencyAmount :NSObject <NSCoding> { NSDecimalNumber *amount; NSString *currencyID; } @property (nonatomic, retain) NSDecimalNumber *amount; @property (nonatomic, retain) NSString *currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID; - (id) initWithNode:(XMLNode *) node; - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale; - (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID; - (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity; - (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount; -(NSString*) stringValue; -(NSString*) rawDecimalAsString; -(NSString*) formatStringWithoutCurrency; -(NSString*) formatStringShort:(BOOL) shortForm; -(NSString*) currencyPrefixShort:(BOOL) shortForm; - (NSComparisonResult)compare:(CurrencyAmount *)other; - (BOOL) isZeroAmount; @end
  • 33.
    @interface CurrencyAmount :NSObject <NSCoding> { NSDecimalNumber *amount; NSString *currencyID; } @property (nonatomic, retain) NSDecimalNumber *amount; @property (nonatomic, retain) NSString *currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID; - (id) initWithNode:(XMLNode *) node; instance method - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale; - (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID; - (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity; - (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount; -(NSString*) stringValue; -(NSString*) rawDecimalAsString; -(NSString*) formatStringWithoutCurrency; -(NSString*) formatStringShort:(BOOL) shortForm; -(NSString*) currencyPrefixShort:(BOOL) shortForm; - (NSComparisonResult)compare:(CurrencyAmount *)other; - (BOOL) isZeroAmount; @end
  • 34.
    @interface CurrencyAmount :NSObject <NSCoding> { NSDecimalNumber *amount; NSString *currencyID; } @property (nonatomic, retain) NSDecimalNumber *amount; @property (nonatomic, retain) NSString *currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID; - (id) initWithNode:(XMLNode *) node; - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale; - (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID; - (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity; - (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount; -(NSString*) stringValue; -(NSString*) rawDecimalAsString; -(NSString*) formatStringWithoutCurrency; -(NSString*) formatStringShort:(BOOL) shortForm; -(NSString*) currencyPrefixShort:(BOOL) shortForm; - (NSComparisonResult)compare:(CurrencyAmount *)other; - (BOOL) isZeroAmount; @end
  • 35.
    @interface CurrencyAmount :NSObject <NSCoding> { NSDecimalNumber *amount; NSString *currencyID; } @property (nonatomic, retain) NSDecimalNumber *amount; @property (nonatomic, retain) NSString *currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID; - (id) initWithNode:(XMLNode *) node; 1st param - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale; - (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID; - (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity; - (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount; -(NSString*) stringValue; -(NSString*) rawDecimalAsString; -(NSString*) formatStringWithoutCurrency; -(NSString*) formatStringShort:(BOOL) shortForm; -(NSString*) currencyPrefixShort:(BOOL) shortForm; - (NSComparisonResult)compare:(CurrencyAmount *)other; - (BOOL) isZeroAmount; @end
  • 36.
    @interface CurrencyAmount :NSObject <NSCoding> { NSDecimalNumber *amount; NSString *currencyID; } @property (nonatomic, retain) NSDecimalNumber *amount; @property (nonatomic, retain) NSString *currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID; - (id) initWithNode:(XMLNode *) node; - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale; - (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID; - (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity; - (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount; -(NSString*) stringValue; -(NSString*) rawDecimalAsString; -(NSString*) formatStringWithoutCurrency; -(NSString*) formatStringShort:(BOOL) shortForm; -(NSString*) currencyPrefixShort:(BOOL) shortForm; - (NSComparisonResult)compare:(CurrencyAmount *)other; - (BOOL) isZeroAmount; @end
  • 37.
    @interface CurrencyAmount :NSObject <NSCoding> { NSDecimalNumber *amount; NSString *currencyID; } @property (nonatomic, retain) NSDecimalNumber *amount; @property (nonatomic, retain) NSString *currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID; - (id) initWithNode:(XMLNode *) node; 2nd param - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale; - (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID; - (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity; - (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount; -(NSString*) stringValue; -(NSString*) rawDecimalAsString; -(NSString*) formatStringWithoutCurrency; -(NSString*) formatStringShort:(BOOL) shortForm; -(NSString*) currencyPrefixShort:(BOOL) shortForm; - (NSComparisonResult)compare:(CurrencyAmount *)other; - (BOOL) isZeroAmount; @end
  • 38.
    @interface CurrencyAmount :NSObject <NSCoding> { NSDecimalNumber *amount; NSString *currencyID; } @property (nonatomic, retain) NSDecimalNumber *amount; @property (nonatomic, retain) NSString *currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID; - (id) initWithNode:(XMLNode *) node; - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale; - (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID; - (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity; - (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount; -(NSString*) stringValue; -(NSString*) rawDecimalAsString; -(NSString*) formatStringWithoutCurrency; -(NSString*) formatStringShort:(BOOL) shortForm; -(NSString*) currencyPrefixShort:(BOOL) shortForm; - (NSComparisonResult)compare:(CurrencyAmount *)other; - (BOOL) isZeroAmount; @end
  • 39.
    @interface CurrencyAmount :NSObject <NSCoding> { NSDecimalNumber *amount; NSString *currencyID; } @property (nonatomic, retain) NSDecimalNumber *amount; @property (nonatomic, retain) NSString *currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID; - (id) initWithNode:(XMLNode *) node; 3rd param - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale; - (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID; - (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity; - (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount; -(NSString*) stringValue; -(NSString*) rawDecimalAsString; -(NSString*) formatStringWithoutCurrency; -(NSString*) formatStringShort:(BOOL) shortForm; -(NSString*) currencyPrefixShort:(BOOL) shortForm; - (NSComparisonResult)compare:(CurrencyAmount *)other; - (BOOL) isZeroAmount; @end
  • 40.
    @interface CurrencyAmount :NSObject <NSCoding> { NSDecimalNumber *amount; NSString *currencyID; } @property (nonatomic, retain) NSDecimalNumber *amount; @property (nonatomic, retain) NSString *currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID; - (id) initWithNode:(XMLNode *) node; - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale; - (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID; - (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity; - (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount; -(NSString*) stringValue; -(NSString*) rawDecimalAsString; -(NSString*) formatStringWithoutCurrency; -(NSString*) formatStringShort:(BOOL) shortForm; -(NSString*) currencyPrefixShort:(BOOL) shortForm; - (NSComparisonResult)compare:(CurrencyAmount *)other; - (BOOL) isZeroAmount; @end
  • 41.
    @interface CurrencyAmount :NSObject <NSCoding> { NSDecimalNumber *amount; NSString *currencyID; } @property (nonatomic, retain) NSDecimalNumber *amount; @property (nonatomic, retain) NSString *currencyID; method name + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID; - (id) initWithNode:(XMLNode *) node; - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale; - (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID; - (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity; - (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount; -(NSString*) stringValue; -(NSString*) rawDecimalAsString; -(NSString*) formatStringWithoutCurrency; -(NSString*) formatStringShort:(BOOL) shortForm; -(NSString*) currencyPrefixShort:(BOOL) shortForm; - (NSComparisonResult)compare:(CurrencyAmount *)other; - (BOOL) isZeroAmount; @end
  • 42.
    @interface CurrencyAmount :NSObject <NSCoding> { NSDecimalNumber *amount; NSString *currencyID; } @property (nonatomic, retain) NSDecimalNumber *amount; @property (nonatomic, retain) NSString *currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID; - (id) initWithNode:(XMLNode *) node; - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID locale:(NSLocale *) locale; - (id) initWithLocalizedStringAmount:(NSString *) inAmount currencyID:(NSString *) inCurrencyID; - (id) initWithDecimalAmount:(NSDecimalNumber *) inAmount currencyID:(NSString *) inCurrencyID; - (CurrencyAmount *) currencyAmountByMultiplyingByQuantity:(int) inQuantity; - (CurrencyAmount *) currencyAmountByAdding:(CurrencyAmount *) inAmount; -(NSString*) stringValue; -(NSString*) rawDecimalAsString; -(NSString*) formatStringWithoutCurrency; -(NSString*) formatStringShort:(BOOL) shortForm; -(NSString*) currencyPrefixShort:(BOOL) shortForm; - (NSComparisonResult)compare:(CurrencyAmount *)other; - (BOOL) isZeroAmount; @end
  • 43.
    @implementation CurrencyAmount @synthesize amount; @synthesizecurrencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID { return [[[CurrencyAmount alloc] initWithDoubleAmount:0.0 currencyID:inCurrencyID] autorelease]; } - (id) initWithNode:(XMLNode *) node { NSString *inCurrencyID = [node attributeValue:@"currencyID"]; [self initWithStringAmount:[node getText] currencyID:inCurrencyID]; return self; } - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID { amount = [[NSDecimalNumber alloc] initWithDouble:inAmount]; self.currencyID = inCurrencyID; return self; } - (BOOL) isZeroAmount { return [amount compare:[NSDecimalNumber zero]] == NSOrderedSame; } - (void) dealloc { [amount release]; [currencyID release]; [super dealloc]; } @end
  • 44.
    @implementation CurrencyAmount implementation of interface @synthesize amount; @synthesize currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID { return [[[CurrencyAmount alloc] initWithDoubleAmount:0.0 currencyID:inCurrencyID] autorelease]; } - (id) initWithNode:(XMLNode *) node { NSString *inCurrencyID = [node attributeValue:@"currencyID"]; [self initWithStringAmount:[node getText] currencyID:inCurrencyID]; return self; } - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID { amount = [[NSDecimalNumber alloc] initWithDouble:inAmount]; self.currencyID = inCurrencyID; return self; } - (BOOL) isZeroAmount { return [amount compare:[NSDecimalNumber zero]] == NSOrderedSame; } - (void) dealloc { [amount release]; [currencyID release]; [super dealloc]; } @end
  • 45.
    @implementation CurrencyAmount @synthesize amount; @synthesizecurrencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID { return [[[CurrencyAmount alloc] initWithDoubleAmount:0.0 currencyID:inCurrencyID] autorelease]; } - (id) initWithNode:(XMLNode *) node { NSString *inCurrencyID = [node attributeValue:@"currencyID"]; [self initWithStringAmount:[node getText] currencyID:inCurrencyID]; return self; } - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID { amount = [[NSDecimalNumber alloc] initWithDouble:inAmount]; self.currencyID = inCurrencyID; return self; } - (BOOL) isZeroAmount { return [amount compare:[NSDecimalNumber zero]] == NSOrderedSame; } - (void) dealloc { [amount release]; [currencyID release]; [super dealloc]; } @end
  • 46.
    @implementation CurrencyAmount @synthesize amount; macro getter/setter @synthesize currencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID { return [[[CurrencyAmount alloc] initWithDoubleAmount:0.0 currencyID:inCurrencyID] autorelease]; } - (id) initWithNode:(XMLNode *) node { NSString *inCurrencyID = [node attributeValue:@"currencyID"]; [self initWithStringAmount:[node getText] currencyID:inCurrencyID]; return self; } - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID { amount = [[NSDecimalNumber alloc] initWithDouble:inAmount]; self.currencyID = inCurrencyID; return self; } - (BOOL) isZeroAmount { return [amount compare:[NSDecimalNumber zero]] == NSOrderedSame; } - (void) dealloc { [amount release]; [currencyID release]; [super dealloc]; } @end
  • 47.
    @implementation CurrencyAmount @synthesize amount; @synthesizecurrencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID { return [[[CurrencyAmount alloc] initWithDoubleAmount:0.0 currencyID:inCurrencyID] autorelease]; } - (id) initWithNode:(XMLNode *) node { NSString *inCurrencyID = [node attributeValue:@"currencyID"]; [self initWithStringAmount:[node getText] currencyID:inCurrencyID]; return self; } - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID { amount = [[NSDecimalNumber alloc] initWithDouble:inAmount]; self.currencyID = inCurrencyID; return self; } - (BOOL) isZeroAmount { return [amount compare:[NSDecimalNumber zero]] == NSOrderedSame; } - (void) dealloc { [amount release]; [currencyID release]; [super dealloc]; } @end
  • 48.
    @implementation CurrencyAmount @synthesize amount; @synthesizecurrencyID; method implementations + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID { return [[[CurrencyAmount alloc] initWithDoubleAmount:0.0 currencyID:inCurrencyID] autorelease]; } - (id) initWithNode:(XMLNode *) node { NSString *inCurrencyID = [node attributeValue:@"currencyID"]; [self initWithStringAmount:[node getText] currencyID:inCurrencyID]; return self; } - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID { amount = [[NSDecimalNumber alloc] initWithDouble:inAmount]; self.currencyID = inCurrencyID; return self; } - (BOOL) isZeroAmount { return [amount compare:[NSDecimalNumber zero]] == NSOrderedSame; } - (void) dealloc { [amount release]; [currencyID release]; [super dealloc]; } @end
  • 49.
    @implementation CurrencyAmount @synthesize amount; @synthesizecurrencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID { return [[[CurrencyAmount alloc] initWithDoubleAmount:0.0 currencyID:inCurrencyID] autorelease]; } - (id) initWithNode:(XMLNode *) node { NSString *inCurrencyID = [node attributeValue:@"currencyID"]; [self initWithStringAmount:[node getText] currencyID:inCurrencyID]; return self; } - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID { amount = [[NSDecimalNumber alloc] initWithDouble:inAmount]; self.currencyID = inCurrencyID; return self; } - (BOOL) isZeroAmount { return [amount compare:[NSDecimalNumber zero]] == NSOrderedSame; } - (void) dealloc { [amount release]; [currencyID release]; [super dealloc]; } @end
  • 50.
    @implementation CurrencyAmount @synthesize amount; @synthesizecurrencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID { return [[[CurrencyAmount alloc] initWithDoubleAmount:0.0 currencyID:inCurrencyID] autorelease]; } method invocation - (id) initWithNode:(XMLNode *) node { NSString *inCurrencyID = [node attributeValue:@"currencyID"]; [self initWithStringAmount:[node getText] currencyID:inCurrencyID]; return self; } - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID { amount = [[NSDecimalNumber alloc] initWithDouble:inAmount]; self.currencyID = inCurrencyID; return self; } - (BOOL) isZeroAmount { return [amount compare:[NSDecimalNumber zero]] == NSOrderedSame; } - (void) dealloc { [amount release]; [currencyID release]; [super dealloc]; } @end
  • 51.
    @implementation CurrencyAmount @synthesize amount; @synthesizecurrencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID { return [[[CurrencyAmount alloc] initWithDoubleAmount:0.0 currencyID:inCurrencyID] autorelease]; } - (id) initWithNode:(XMLNode *) node { NSString *inCurrencyID = [node attributeValue:@"currencyID"]; [self initWithStringAmount:[node getText] currencyID:inCurrencyID]; return self; } - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID { amount = [[NSDecimalNumber alloc] initWithDouble:inAmount]; self.currencyID = inCurrencyID; return self; } - (BOOL) isZeroAmount { return [amount compare:[NSDecimalNumber zero]] == NSOrderedSame; } - (void) dealloc { [amount release]; [currencyID release]; [super dealloc]; } @end
  • 52.
    @implementation CurrencyAmount @synthesize amount; @synthesizecurrencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID { return [[[CurrencyAmount alloc] initWithDoubleAmount:0.0 currencyID:inCurrencyID] autorelease]; } - (id) initWithNode:(XMLNode *) node { NSString *inCurrencyID = [node attributeValue:@"currencyID"];string literal [self initWithStringAmount:[node getText] currencyID:inCurrencyID]; return self; } - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID { amount = [[NSDecimalNumber alloc] initWithDouble:inAmount]; self.currencyID = inCurrencyID; return self; } - (BOOL) isZeroAmount { return [amount compare:[NSDecimalNumber zero]] == NSOrderedSame; } - (void) dealloc { [amount release]; [currencyID release]; [super dealloc]; } @end
  • 53.
    @implementation CurrencyAmount @synthesize amount; @synthesizecurrencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID { return [[[CurrencyAmount alloc] initWithDoubleAmount:0.0 currencyID:inCurrencyID] autorelease]; } - (id) initWithNode:(XMLNode *) node { NSString *inCurrencyID = [node attributeValue:@"currencyID"]; [self initWithStringAmount:[node getText] currencyID:inCurrencyID]; return self; } - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID { amount = [[NSDecimalNumber alloc] initWithDouble:inAmount]; self.currencyID = inCurrencyID; return self; } - (BOOL) isZeroAmount { return [amount compare:[NSDecimalNumber zero]] == NSOrderedSame; } - (void) dealloc { [amount release]; [currencyID release]; [super dealloc]; } @end
  • 54.
    @implementation CurrencyAmount @synthesize amount; @synthesizecurrencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID { return [[[CurrencyAmount alloc] initWithDoubleAmount:0.0 currencyID:inCurrencyID] autorelease]; } - (id) initWithNode:(XMLNode *) node { NSString *inCurrencyID = [node attributeValue:@"currencyID"]; [self initWithStringAmount:[node getText] currencyID:inCurrencyID]; return self; } nested call - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID { amount = [[NSDecimalNumber alloc] initWithDouble:inAmount]; self.currencyID = inCurrencyID; return self; } - (BOOL) isZeroAmount { return [amount compare:[NSDecimalNumber zero]] == NSOrderedSame; } - (void) dealloc { [amount release]; [currencyID release]; [super dealloc]; } @end
  • 55.
    @implementation CurrencyAmount @synthesize amount; @synthesizecurrencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID { return [[[CurrencyAmount alloc] initWithDoubleAmount:0.0 currencyID:inCurrencyID] autorelease]; } - (id) initWithNode:(XMLNode *) node { NSString *inCurrencyID = [node attributeValue:@"currencyID"]; [self initWithStringAmount:[node getText] currencyID:inCurrencyID]; return self; } - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID { amount = [[NSDecimalNumber alloc] initWithDouble:inAmount]; self.currencyID = inCurrencyID; return self; } - (BOOL) isZeroAmount { return [amount compare:[NSDecimalNumber zero]] == NSOrderedSame; } - (void) dealloc { [amount release]; [currencyID release]; [super dealloc]; } @end
  • 56.
    @implementation CurrencyAmount @synthesize amount; @synthesizecurrencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID { return [[[CurrencyAmount alloc] initWithDoubleAmount:0.0 currencyID:inCurrencyID] autorelease]; } - (id) initWithNode:(XMLNode *) node { NSString *inCurrencyID = [node attributeValue:@"currencyID"]; [self initWithStringAmount:[node getText] currencyID:inCurrencyID]; this instance return self; } - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID { amount = [[NSDecimalNumber alloc] initWithDouble:inAmount]; self.currencyID = inCurrencyID; return self; } - (BOOL) isZeroAmount { return [amount compare:[NSDecimalNumber zero]] == NSOrderedSame; } - (void) dealloc { [amount release]; [currencyID release]; [super dealloc]; } @end
  • 57.
    @implementation CurrencyAmount @synthesize amount; @synthesizecurrencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID { return [[[CurrencyAmount alloc] initWithDoubleAmount:0.0 currencyID:inCurrencyID] autorelease]; } - (id) initWithNode:(XMLNode *) node { NSString *inCurrencyID = [node attributeValue:@"currencyID"]; [self initWithStringAmount:[node getText] currencyID:inCurrencyID]; return self; } - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID { amount = [[NSDecimalNumber alloc] initWithDouble:inAmount]; self.currencyID = inCurrencyID; return self; } - (BOOL) isZeroAmount { return [amount compare:[NSDecimalNumber zero]] == NSOrderedSame; } - (void) dealloc { [amount release]; [currencyID release]; [super dealloc]; } @end
  • 58.
    @implementation CurrencyAmount @synthesize amount; @synthesizecurrencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID { return [[[CurrencyAmount alloc] initWithDoubleAmount:0.0 currencyID:inCurrencyID] autorelease]; } - (id) initWithNode:(XMLNode *) node { NSString *inCurrencyID = [node attributeValue:@"currencyID"]; [self initWithStringAmount:[node getText] currencyID:inCurrencyID]; return self; } - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID { amount = [[NSDecimalNumber alloc] initWithDouble:inAmount]; self.currencyID = inCurrencyID; return self; } - (BOOL) isZeroAmount { return [amount compare:[NSDecimalNumber zero]] == NSOrderedSame; } - (void) dealloc { override superclass [amount release]; [currencyID release]; [super dealloc]; } @end
  • 59.
    @implementation CurrencyAmount @synthesize amount; @synthesizecurrencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID { return [[[CurrencyAmount alloc] initWithDoubleAmount:0.0 currencyID:inCurrencyID] autorelease]; } - (id) initWithNode:(XMLNode *) node { NSString *inCurrencyID = [node attributeValue:@"currencyID"]; [self initWithStringAmount:[node getText] currencyID:inCurrencyID]; return self; } - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID { amount = [[NSDecimalNumber alloc] initWithDouble:inAmount]; self.currencyID = inCurrencyID; return self; } - (BOOL) isZeroAmount { return [amount compare:[NSDecimalNumber zero]] == NSOrderedSame; } - (void) dealloc { [amount release]; [currencyID release]; [super dealloc]; } @end
  • 60.
    @implementation CurrencyAmount @synthesize amount; @synthesizecurrencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID { return [[[CurrencyAmount alloc] initWithDoubleAmount:0.0 currencyID:inCurrencyID] autorelease]; } - (id) initWithNode:(XMLNode *) node { NSString *inCurrencyID = [node attributeValue:@"currencyID"]; [self initWithStringAmount:[node getText] currencyID:inCurrencyID]; return self; } - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID { amount = [[NSDecimalNumber alloc] initWithDouble:inAmount]; self.currencyID = inCurrencyID; return self; } - (BOOL) isZeroAmount { return [amount compare:[NSDecimalNumber zero]] == NSOrderedSame; } - (void) dealloc { memory mangement [amount release]; [currencyID release]; [super dealloc]; } @end
  • 61.
    @implementation CurrencyAmount @synthesize amount; @synthesizecurrencyID; + (CurrencyAmount *) zeroAmountWithCurrencyID:(NSString *) inCurrencyID { return [[[CurrencyAmount alloc] initWithDoubleAmount:0.0 currencyID:inCurrencyID] autorelease]; } - (id) initWithNode:(XMLNode *) node { NSString *inCurrencyID = [node attributeValue:@"currencyID"]; [self initWithStringAmount:[node getText] currencyID:inCurrencyID]; return self; } - (id) initWithDoubleAmount:(double) inAmount currencyID:(NSString *) inCurrencyID { amount = [[NSDecimalNumber alloc] initWithDouble:inAmount]; self.currencyID = inCurrencyID; return self; } - (BOOL) isZeroAmount { return [amount compare:[NSDecimalNumber zero]] == NSOrderedSame; } - (void) dealloc { [amount release]; [currencyID release]; [super dealloc]; } @end
  • 62.
  • 64.
    XCode • Full featured IDE • Build, debug • Code navigation, completion • Refactoring • SCM Integration • Wizards
  • 65.
    Interface Builder • Drag-and-drop, UI Design Tool • Integrated with XCode • Connect code to UI elements (events)
  • 66.
    Instruments • Profiling Tool • Memory Usage • Leaks • CPU Usage • Threads, I/O Monitoring
  • 67.
    iPhone Emulator Runs applicationnatively Not all APIs available Some APIs mocked: Location
  • 68.
    Cocoa Touch • MVC Framework • AppKit • Controls, Events • UIKit • Accelerometer, Multi-touch
  • 69.
  • 70.
  • 71.
    Don’t Call Me... PushNotifications = Substitute for Background Processing?
  • 72.
    App 2 App Noformal intra-application communication allowed Custom URL protocols used as hack
  • 73.
  • 76.
    Android • Devices, devices, devices • Open Source: OS, SDK • Language: Java+ • Features: Multi-threaded, Open GL ES, Contacts, Email, WebKit, Media, GPS, Google Maps, (Video)Camera, Local Database, Background Service, Garbage Collection, Intents • Pitfalls: Memory Management, Assault on Battery, Devices, Devices, Devices...
  • 77.
    Compiler Dex Compiler Compress Source Code Class files Dex File APK
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
    Android Runtime &App Framework • Activities & Intents • Separation of Concerns • Launch an Activity based on an • Layout Intent • Application Logic • Application Interop • XML => Bytecode • Layout • Localization
  • 85.
    The Web Services Diet WebServices: Made for Servers, not Phones Data Centric vs. Functional Centric Mo’ Data, Mo’ Problems XML = Teh Suck
  • 86.
    Try Not to Drown •Images,Audio, Video •Browser features taken for granted •Caching / Cache Management •Simultaneous Loading
  • 87.
    Security • What to store on device? • What about stolen devices? • Jailbreaking? • Phishing? • OAuth??? • Hard coding == FAIL
  • 88.
    Upgrades? What Upgrades? • Far from automatic • Out of sight, out of mind • Don’t expect upgrades • Lots of versions to manage • Agile Development FTW???
  • 89.
    eb le W b i Mo
  • 90.
    Mobile Web a.k.a.HTML 5 • One app to rule them all: iPhone, Android, webOS, Blackberry* • Language: JavaScript, HTML, CSS • Tools: ... • Features: Multi-threaded!, Open GL ES, Contacts, Email, GPS, Maps, (Video)Camera, Local Database, Media, Memory Management, Security • Pitfalls: Memory management, no background processing, WebKit versioning
  • 91.
  • 92.
    iPhone Developer Center • Silicon Valley iPhone Developers • Stack Overflow • MOTODEV • Android Developers • Silicon Valley Android Developers • Android Developers Group
  • 93.
    Sprint Developer Conference • October 26-28 • Santa Clara Convention Center • Android, Mobile Web, webOS, RIM, J2ME, WinMo • Coding Camps • Free HTC Hero (Android) • 4G Demo and Beta