วิธีเรียกใช้ 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]
<< หน้าแรก