about bank

วันจันทร์, ธันวาคม 27, 2547

วิธีเรียกใช้ Object ให้เข้าทาง Objective-C

ใน mailing list ของ apple นี่ดีจริง วันนี้ก็ได้รับความช่วยเหลืออีกแล้วครับท่าน Andrew ให้คำแนะนำมานิดหน่อย แต่เป็นตัวอย่างที่ช่วยให้คิดอะไรต่อได้มากจริงๆ ครับ

ดู code ตัวเก่าที่เขียนกันวันก่อน


NSAutoreleasePool * pool = [NSAutoreleasePool new];
for (i=0; i<2; i++){
str = [NSString stringWithFormat:@"Double %d",i];

dd3 = [DataDic new];
[dd3 setName:str];

[myArray addObject:dd3];
[dd3 release];
}
[pool release];


จะเห็นว่า str ไม่ได้ถูกชี้ไปที่ NSString ที่ถูก init ก็เลยต้องใช้ AutoreleasePool เข้ามาช่วย จริงๆ ตรงนี้ก็งงๆ นะ เก็บไว้ก่อนละกัน :p

อันนี้ตัวใหม่ที่ดูดีกว่าครับ (ปรับปรุงจากที่ Andrew แนะนำ)


for (i=0; i<2; i++){
str = [[NSString alloc] initWithFormat:@"Double %d",i];

dd3 = [DataDic new];
[dd3 setName:str];

[myArray addObject:dd3];
[dd3 release];
}


ตอนนี้ str ก็ได้ String จริงๆ ไปใช้แล้วครับ :) อีกอย่างหนึ่ง Andrew แนะนำครับ
คือให้เติม method นี้ลงใน DataDic.m เพื่อ optimize code ครับ


- (id)initWithWord:(NSString *)aString {
if (self = [super init]) {
_name = [aString retain];
// this assumes that you have the instance variable '_nord'
// you should also initialise any other instance variables here
}
return self;
}


คิดว่าคงความหมายเดียว constructer หรือแบบเดียวกับ static method ที่เรียก constructor อีกที :p ในภาษา java แต่ใน objective-c ถ้าเราทำแบบนี้ แล้วก็มีดีที่ตัว method จะบอกความเหมายของมันด้วย

ไม่รู้ว่า objective-c จะมี constructer ได้หลายอันหรือเปล่า ไว้ลองวันหลังเนอะ

0 ความคิดเห็น:

แสดงความคิดเห็น

สมัครสมาชิก ส่งความคิดเห็น [Atom]



<< หน้าแรก