intrebare @property si @synthesize directives
#1
Posted 11 March 2010 - 21:03
@class XYPoint;
@interface Rectangle: NSObject
{
int width;
int height;
XYPoint *origin;
}
XYPoint este o alta clasa ce contie 2 int x si y.
in functia main am 2 pointeri,1 de tipul Rectangle si unul de tipul XYPoint:
Rectangle *myRectangle = [[Rectangle alloc] init];
XYPoint *myPoint = [[XYPoint alloc] init];
ma intereseaza daca se poate cu @property si @synthesize sa pot aloca:
myRectangle.origin = myPoint;
pentru ca aceasta alocare sa functioneze(fara @property si @synthesize) am vazut ca trebuie create 2 medode(functii),un getter si un setter,dar acestea nu sunt apelate in main():
-(XYPoint *) origin;
-(void) setOrigin: (XYPoint *) pt;
#2
Posted 12 March 2010 - 16:42
am o intrebare,am urmatorul exemplu de clasa:
@class XYPoint;
@interface Rectangle: NSObject
{
int width;
int height;
XYPoint *origin;
}
XYPoint este o alta clasa ce contie 2 int x si y.
in functia main am 2 pointeri,1 de tipul Rectangle si unul de tipul XYPoint:
Rectangle *myRectangle = [[Rectangle alloc] init];
XYPoint *myPoint = [[XYPoint alloc] init];
ma intereseaza daca se poate cu @property si @synthesize sa pot aloca:
myRectangle.origin = myPoint;
pentru ca aceasta alocare sa functioneze(fara @property si @synthesize) am vazut ca trebuie create 2 medode(functii),un getter si un setter,dar acestea nu sunt apelate in main():
-(XYPoint *) origin;
-(void) setOrigin: (XYPoint *) pt;
origin si setOrigin nu tin de main, ci de clasa myRectangle, si ca atare apar in implementarea clasei.
Mai jos un exemplu.
1/ Vezi ca trebuie sa implementezi destroy pentru clase pentru care scrii tu settere si gettere pentru ca trebuie sa balansezi retain-release-urile la dealocarea clasei.
2/ [myRectangle setOrigin:myPoint]; e echivalent cu myRectangle.origin = myPoint; incepand cu ObjC 2.0 dar eu prefer prima varianta, mi se pare mai lizibila. YMMV.
#import <Cocoa/Cocoa.h>
@interface XYPoint:NSObject
{
int x, y;
}
@end
@implementation XYPoint
- (id) initWithX:(int)px andY:(int) py
{
self = [super init];
x = px;
y = py;
return self;
}
- (NSString *) description
{
return [NSString stringWithFormat:@"Punct x=%d, y=%d", x, y];
}
@end
@interface Rectangle: NSObject
{
int width;
int height;
XYPoint *origin;
}
@end
@implementation Rectangle
-(XYPoint *) origin
{
return origin;
}
-(void) setOrigin: (XYPoint *) pt
{
[origin release];
origin = pt;
[origin retain];
}
@end
int main()
{
NSAutoreleasePool * p = [NSAutoreleasePool new];
Rectangle *myRectangle = [Rectangle new];
XYPoint *myPoint = [[XYPoint alloc] initWithX:10 andY:20];
[myRectangle setOrigin:myPoint];
NSLog(@"originea este %@", [myRectangle origin]);
[p release];
}
#3
Posted 12 March 2010 - 17:10
pentru mine e mai usoara a 2-a varianta myRectangle.origin = myPoint,asa accesam membri unei clase in c dar banuiesc ca ma voi obisnui cat de curand cu sintaxa
0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users













