SlideShare uma empresa Scribd logo
1 de 93
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

Mais conteúdo relacionado

Destaque

Kulturkartläggnings processen
Kulturkartläggnings  processenKulturkartläggnings  processen
Kulturkartläggnings processenLina Ydrefelt
 
Managing Communities of Learning: The Impact and Role of Facilitators
Managing Communities of Learning: The Impact and Role of FacilitatorsManaging Communities of Learning: The Impact and Role of Facilitators
Managing Communities of Learning: The Impact and Role of FacilitatorsMartin Rehm
 
Continuous deployments in Azure websites (by Anton Vidishchev)
Continuous deployments in Azure websites (by Anton Vidishchev)Continuous deployments in Azure websites (by Anton Vidishchev)
Continuous deployments in Azure websites (by Anton Vidishchev)Alexandra Chudner
 
Kliniksefiuzman
KliniksefiuzmanKliniksefiuzman
Kliniksefiuzmananttab
 
Kirimkongo
KirimkongoKirimkongo
Kirimkongoanttab
 
Kusgribi
KusgribiKusgribi
Kusgribianttab
 
The Future of Big Data in Education
The Future of Big Data in EducationThe Future of Big Data in Education
The Future of Big Data in EducationHendrik Drachsler
 
Życie prywatne w rodzinie
Życie prywatne w rodzinieŻycie prywatne w rodzinie
Życie prywatne w rodzinieagata stanisz
 
Marketing strategies to increase the ROI on mobile
Marketing strategies to increase the ROI on mobileMarketing strategies to increase the ROI on mobile
Marketing strategies to increase the ROI on mobileAmit Ambastha
 
Sprawne Smoki - Gładyszów 2012
Sprawne Smoki - Gładyszów 2012Sprawne Smoki - Gładyszów 2012
Sprawne Smoki - Gładyszów 2012Maria Ptak
 
香港六合彩 &raquo; SlideShare
香港六合彩 &raquo; SlideShare香港六合彩 &raquo; SlideShare
香港六合彩 &raquo; SlideSharepiwnioyh
 
El abuso de las drogas
El abuso de las drogasEl abuso de las drogas
El abuso de las drogasPaulo Arieu
 
Time Manag.
Time Manag.Time Manag.
Time Manag.agek2005
 
25et_Bulgaria
25et_Bulgaria25et_Bulgaria
25et_BulgariaGavranica
 
Building Bridges between Academic Tribes
Building Bridges between Academic TribesBuilding Bridges between Academic Tribes
Building Bridges between Academic TribesMartin Rehm
 
Еmail vs Social — Евгений Вольнов
Еmail vs Social — Евгений ВольновЕmail vs Social — Евгений Вольнов
Еmail vs Social — Евгений ВольновMaria Podolyak
 
Latvia my school-keipenes_school(1)
Latvia my school-keipenes_school(1)Latvia my school-keipenes_school(1)
Latvia my school-keipenes_school(1)Gavranica
 
R&D activites on Learning Analytics
R&D activites on Learning AnalyticsR&D activites on Learning Analytics
R&D activites on Learning AnalyticsHendrik Drachsler
 

Destaque (20)

Kulturkartläggnings processen
Kulturkartläggnings  processenKulturkartläggnings  processen
Kulturkartläggnings processen
 
Managing Communities of Learning: The Impact and Role of Facilitators
Managing Communities of Learning: The Impact and Role of FacilitatorsManaging Communities of Learning: The Impact and Role of Facilitators
Managing Communities of Learning: The Impact and Role of Facilitators
 
Continuous deployments in Azure websites (by Anton Vidishchev)
Continuous deployments in Azure websites (by Anton Vidishchev)Continuous deployments in Azure websites (by Anton Vidishchev)
Continuous deployments in Azure websites (by Anton Vidishchev)
 
Kliniksefiuzman
KliniksefiuzmanKliniksefiuzman
Kliniksefiuzman
 
Kirimkongo
KirimkongoKirimkongo
Kirimkongo
 
Kusgribi
KusgribiKusgribi
Kusgribi
 
The Future of Big Data in Education
The Future of Big Data in EducationThe Future of Big Data in Education
The Future of Big Data in Education
 
Życie prywatne w rodzinie
Życie prywatne w rodzinieŻycie prywatne w rodzinie
Życie prywatne w rodzinie
 
Marketing strategies to increase the ROI on mobile
Marketing strategies to increase the ROI on mobileMarketing strategies to increase the ROI on mobile
Marketing strategies to increase the ROI on mobile
 
Sprawne Smoki - Gładyszów 2012
Sprawne Smoki - Gładyszów 2012Sprawne Smoki - Gładyszów 2012
Sprawne Smoki - Gładyszów 2012
 
香港六合彩 &raquo; SlideShare
香港六合彩 &raquo; SlideShare香港六合彩 &raquo; SlideShare
香港六合彩 &raquo; SlideShare
 
Qenlacecovalente
QenlacecovalenteQenlacecovalente
Qenlacecovalente
 
The CLAS APP
The CLAS APPThe CLAS APP
The CLAS APP
 
El abuso de las drogas
El abuso de las drogasEl abuso de las drogas
El abuso de las drogas
 
Time Manag.
Time Manag.Time Manag.
Time Manag.
 
25et_Bulgaria
25et_Bulgaria25et_Bulgaria
25et_Bulgaria
 
Building Bridges between Academic Tribes
Building Bridges between Academic TribesBuilding Bridges between Academic Tribes
Building Bridges between Academic Tribes
 
Еmail vs Social — Евгений Вольнов
Еmail vs Social — Евгений ВольновЕmail vs Social — Евгений Вольнов
Еmail vs Social — Евгений Вольнов
 
Latvia my school-keipenes_school(1)
Latvia my school-keipenes_school(1)Latvia my school-keipenes_school(1)
Latvia my school-keipenes_school(1)
 
R&D activites on Learning Analytics
R&D activites on Learning AnalyticsR&D activites on Learning Analytics
R&D activites on Learning Analytics
 

Semelhante a Mobile Development 101

iPhone Development Intro
iPhone Development IntroiPhone Development Intro
iPhone Development IntroLuis Azevedo
 
Programming iOS in C#
Programming iOS in C#Programming iOS in C#
Programming iOS in C#Frank Krueger
 
Danny Banks - Building consistent Cross-Platform interfaces - Codemotion Amst...
Danny Banks - Building consistent Cross-Platform interfaces - Codemotion Amst...Danny Banks - Building consistent Cross-Platform interfaces - Codemotion Amst...
Danny Banks - Building consistent Cross-Platform interfaces - Codemotion Amst...Codemotion
 
Native Phone Development 101
Native Phone Development 101Native Phone Development 101
Native Phone Development 101Sasmito Adibowo
 
Iphone os dev sharing with new examples
Iphone os dev sharing with new examplesIphone os dev sharing with new examples
Iphone os dev sharing with new exampleskenshin03
 
HTML5 and Other Modern Browser Game Tech
HTML5 and Other Modern Browser Game TechHTML5 and Other Modern Browser Game Tech
HTML5 and Other Modern Browser Game Techvincent_scheib
 
Cooking your Ravioli "al dente" with Hexagonal Architecture
Cooking your Ravioli "al dente" with Hexagonal ArchitectureCooking your Ravioli "al dente" with Hexagonal Architecture
Cooking your Ravioli "al dente" with Hexagonal ArchitectureJeroen Rosenberg
 
iOS Einführung am Beispiel von play NEXT TEE
iOS Einführung am Beispiel von play NEXT TEEiOS Einführung am Beispiel von play NEXT TEE
iOS Einführung am Beispiel von play NEXT TEEHendrik Ebel
 
NativeScript and Angular
NativeScript and AngularNativeScript and Angular
NativeScript and AngularJen Looper
 
NativeScript 環境のインストールとはじめてのプロジェクト実行
NativeScript 環境のインストールとはじめてのプロジェクト実行NativeScript 環境のインストールとはじめてのプロジェクト実行
NativeScript 環境のインストールとはじめてのプロジェクト実行Osamu Monoe
 
JSR 354: Money and Currency API - Short Overview
JSR 354: Money and Currency API - Short OverviewJSR 354: Money and Currency API - Short Overview
JSR 354: Money and Currency API - Short OverviewWerner Keil
 
Users' Data Security in iOS Applications
Users' Data Security in iOS ApplicationsUsers' Data Security in iOS Applications
Users' Data Security in iOS ApplicationsStanfy
 
Build your wp8 app today
Build your wp8 app todayBuild your wp8 app today
Build your wp8 app todayjalpf
 
Crypton Studio Presentation
Crypton Studio PresentationCrypton Studio Presentation
Crypton Studio PresentationAlexMainov
 
Presentation of Crypton Studio
Presentation of Crypton StudioPresentation of Crypton Studio
Presentation of Crypton StudioIgorUstinov6
 

Semelhante a Mobile Development 101 (20)

iPhone Development Intro
iPhone Development IntroiPhone Development Intro
iPhone Development Intro
 
Programming iOS in C#
Programming iOS in C#Programming iOS in C#
Programming iOS in C#
 
Danny Banks - Building consistent Cross-Platform interfaces - Codemotion Amst...
Danny Banks - Building consistent Cross-Platform interfaces - Codemotion Amst...Danny Banks - Building consistent Cross-Platform interfaces - Codemotion Amst...
Danny Banks - Building consistent Cross-Platform interfaces - Codemotion Amst...
 
UIWebView Tips
UIWebView TipsUIWebView Tips
UIWebView Tips
 
Native Phone Development 101
Native Phone Development 101Native Phone Development 101
Native Phone Development 101
 
Iphone os dev sharing with new examples
Iphone os dev sharing with new examplesIphone os dev sharing with new examples
Iphone os dev sharing with new examples
 
Super spike
Super spikeSuper spike
Super spike
 
HTML5 and Other Modern Browser Game Tech
HTML5 and Other Modern Browser Game TechHTML5 and Other Modern Browser Game Tech
HTML5 and Other Modern Browser Game Tech
 
Cooking your Ravioli "al dente" with Hexagonal Architecture
Cooking your Ravioli "al dente" with Hexagonal ArchitectureCooking your Ravioli "al dente" with Hexagonal Architecture
Cooking your Ravioli "al dente" with Hexagonal Architecture
 
iOS Einführung am Beispiel von play NEXT TEE
iOS Einführung am Beispiel von play NEXT TEEiOS Einführung am Beispiel von play NEXT TEE
iOS Einführung am Beispiel von play NEXT TEE
 
NativeScript and Angular
NativeScript and AngularNativeScript and Angular
NativeScript and Angular
 
NativeScript 環境のインストールとはじめてのプロジェクト実行
NativeScript 環境のインストールとはじめてのプロジェクト実行NativeScript 環境のインストールとはじめてのプロジェクト実行
NativeScript 環境のインストールとはじめてのプロジェクト実行
 
Adopt JSR 354
Adopt JSR 354Adopt JSR 354
Adopt JSR 354
 
JSR 354: Money and Currency API - Short Overview
JSR 354: Money and Currency API - Short OverviewJSR 354: Money and Currency API - Short Overview
JSR 354: Money and Currency API - Short Overview
 
Users' Data Security in iOS Applications
Users' Data Security in iOS ApplicationsUsers' Data Security in iOS Applications
Users' Data Security in iOS Applications
 
iOS
iOSiOS
iOS
 
Build your wp8 app today
Build your wp8 app todayBuild your wp8 app today
Build your wp8 app today
 
Crypton Studio Presentation
Crypton Studio PresentationCrypton Studio Presentation
Crypton Studio Presentation
 
Presentation of Crypton Studio
Presentation of Crypton StudioPresentation of Crypton Studio
Presentation of Crypton Studio
 
mobl
moblmobl
mobl
 

Mais de Michael Galpin

Android lessons you won't learn in school
Android lessons you won't learn in schoolAndroid lessons you won't learn in school
Android lessons you won't learn in schoolMichael Galpin
 
Design Patterns for Tablets and Smartphones
Design Patterns for Tablets and SmartphonesDesign Patterns for Tablets and Smartphones
Design Patterns for Tablets and SmartphonesMichael Galpin
 
Scala on Android: Experiences at Bump Technologies
Scala on Android: Experiences at Bump TechnologiesScala on Android: Experiences at Bump Technologies
Scala on Android: Experiences at Bump TechnologiesMichael Galpin
 
That’s My App - Running in Your Background - Draining Your Battery
That’s My App - Running in Your Background - Draining Your BatteryThat’s My App - Running in Your Background - Draining Your Battery
That’s My App - Running in Your Background - Draining Your BatteryMichael Galpin
 
Persistent Data Structures And Managed References
Persistent Data Structures And Managed ReferencesPersistent Data Structures And Managed References
Persistent Data Structures And Managed ReferencesMichael Galpin
 
RIAs Done Right: Grails, Flex, and EXT GWT
RIAs Done Right: Grails, Flex, and EXT GWTRIAs Done Right: Grails, Flex, and EXT GWT
RIAs Done Right: Grails, Flex, and EXT GWTMichael Galpin
 
Introduction to Scala for Java Developers
Introduction to Scala for Java DevelopersIntroduction to Scala for Java Developers
Introduction to Scala for Java DevelopersMichael Galpin
 

Mais de Michael Galpin (12)

Android lessons you won't learn in school
Android lessons you won't learn in schoolAndroid lessons you won't learn in school
Android lessons you won't learn in school
 
Design Patterns for Tablets and Smartphones
Design Patterns for Tablets and SmartphonesDesign Patterns for Tablets and Smartphones
Design Patterns for Tablets and Smartphones
 
Android workshop
Android workshopAndroid workshop
Android workshop
 
Scala on Android: Experiences at Bump Technologies
Scala on Android: Experiences at Bump TechnologiesScala on Android: Experiences at Bump Technologies
Scala on Android: Experiences at Bump Technologies
 
That’s My App - Running in Your Background - Draining Your Battery
That’s My App - Running in Your Background - Draining Your BatteryThat’s My App - Running in Your Background - Draining Your Battery
That’s My App - Running in Your Background - Draining Your Battery
 
Mobile Web 5.0
Mobile Web 5.0Mobile Web 5.0
Mobile Web 5.0
 
Persistent Data Structures And Managed References
Persistent Data Structures And Managed ReferencesPersistent Data Structures And Managed References
Persistent Data Structures And Managed References
 
Scala on Your Phone
Scala on Your PhoneScala on Your Phone
Scala on Your Phone
 
RIAs Done Right: Grails, Flex, and EXT GWT
RIAs Done Right: Grails, Flex, and EXT GWTRIAs Done Right: Grails, Flex, and EXT GWT
RIAs Done Right: Grails, Flex, and EXT GWT
 
Eclipse @eBay 2009
Eclipse @eBay 2009Eclipse @eBay 2009
Eclipse @eBay 2009
 
Introduction to Scala for Java Developers
Introduction to Scala for Java DevelopersIntroduction to Scala for Java Developers
Introduction to Scala for Java Developers
 
Eclipse@eBay
Eclipse@eBayEclipse@eBay
Eclipse@eBay
 

Último

The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxLoriGlavin3
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxLoriGlavin3
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityIES VE
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfMounikaPolabathina
 
A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI AgeCprime
 
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfpanagenda
 
Generative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfGenerative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfIngrid Airi González
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rick Flair
 
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...AliaaTarek5
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsNathaniel Shimoni
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentPim van der Noll
 
Manual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditManual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditSkynet Technologies
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Farhan Tariq
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality AssuranceInflectra
 
Testing tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesTesting tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesKari Kakkonen
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 

Último (20)

The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptx
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a reality
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdf
 
A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI Age
 
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
 
Generative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfGenerative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdf
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...
 
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directions
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
 
Manual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditManual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance Audit
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
 
Testing tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesTesting tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examples
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 

Mobile Development 101

  • 1. Mobile Development 101: Developing Apps for the iPhone and the Android Platforms Michael Galpin, eBay @michaelg
  • 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
  • 4.
  • 6. Usage Capabilities Phones That Matter Distribution Barriers
  • 8.
  • 9. iPhone 50% of Mobile Internet 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; @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
  • 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; @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
  • 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; @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
  • 48. @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
  • 49. @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
  • 50. @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
  • 51. @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
  • 52. @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
  • 53. @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
  • 54. @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
  • 55. @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
  • 56. @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
  • 57. @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
  • 58. @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
  • 59. @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
  • 60. @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
  • 61. @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
  • 62. Tools
  • 63.
  • 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 application natively Not all APIs available Some APIs mocked: Location
  • 68. Cocoa Touch • MVC Framework • AppKit • Controls, Events • UIKit • Accelerometer, Multi-touch
  • 71. Don’t Call Me... Push Notifications = Substitute for Background Processing?
  • 72. App 2 App No formal intra-application communication allowed Custom URL protocols used as hack
  • 74.
  • 75.
  • 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
  • 78.
  • 79. Java
  • 80. Tools
  • 81. Tools
  • 82. DDMS
  • 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
  • 84.
  • 85. The Web Services Diet Web Services: 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
  • 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