class間傳訊息

class間傳訊息:2011年05月10日星期二

有aClass及bClass,假設AClass會BClass *myBClass = [[BClass alloc] init];因此,可用myBClass去call任何BClass內method因而達到AClass傳訊息給BClass的目的。但是,如何在BClass內傳訊息給AClass呢?

困難原因:BClass內沒有AClass這receiver。

解法:

Aclass.h

  1. @interface AClass{ NSString *stringInA; }
  2. @property (nonoatomic, copy) NSString *stringInA;
  3. @end

AClass.m

  1. #include "AClass.h"
  2. #include "BClass.h"
  3. @implemetation AClass
  4. @synthesize staringInA;
  5. -(void)loadView{ BClass *myBClass = [[BClass alloc] init:self]; }
  6. @end

Bclass.h

  1. @interface BClass{ id myADelegate; }
  2. -(id) init: (id) aDelegeate;
  3. @end

BClass.m

  1. #include "BClass.h"
  2. #include "AClass.h"
  3. @implemetation aClass
  4. -(id) init: (id) aDelegeate
  5. {
  6. id self = [super init];
  7. myADelegate = aDelegate; //將AClass的instance存起來
  8. myADelegate.stringInA = @"將String傳給AClass";
  9. }
  10. -(void)loadView{ .... }
  11. @end

以上程式的重點在於在AClass.m中第5行,BClass *myBClass = [[BClass alloc] init:self];將self傳給BClass,BClass.m的第7行可將此aDelegate存起來,也可在第8行使用它,總之,即可用此argument來reference AClass。