ภายในวิธีการเริ่มต้น ฉันมีรหัสต่อไปนี้
- (id)init {
self = [super init];
if (self) {
UIButton *tempButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
tempButton.frame = CGRectMake(0,0,300,44);
// some custom code...
self.myButton = tempButton;
}
return self;
}
โดยที่ myButton
คือทรัพย์สินที่คงไว้ ฉันรู้ว่าสำหรับกฎการจัดการหน่วยความจำ วิธีนี้เท่ากับวิธีอื่น:
- (id)init {
self = [super init];
if (self) {
UIButton *tempButton = [[UIButton alloc] initWithFrame:CGRectMake(0,0,300,44)];
// some custom code...
self.myButton = tempButton;
[tempButton release];
}
return self;
}
แต่ในกรณีนี้ ฉันจำเป็นต้องใช้ "เวอร์ชัน" แรก เนื่องจากคุณสมบัติ buttonType
เป็นแบบอ่านอย่างเดียว และฉันไม่สามารถเปลี่ยนแปลงได้หลังจากที่ปุ่มเริ่มใช้งานแล้ว
เนื่องจากฉันพบว่าตัวเองใช้เวอร์ชัน "non init-release" ในหลายวิธีทั่วแอปพลิเคชันของฉัน และสำหรับออบเจ็กต์หลายอย่าง (ส่วนใหญ่เป็น NSString
) คำถามของฉันคือ: ไม่นับในกรณีนี้การมอบหมายให้กับคุณสมบัติที่ยังคงรักษา object วัตถุ tempButton
จะถูกปล่อยออกมาเมื่อใด? อาจจะอยู่ท้ายคำสั่ง method/if ใช่ไหม? หรือ "เวอร์ชัน" แรกจะนำไปสู่การใช้หน่วยความจำที่เพิ่มขึ้น เนื่องจากวัตถุไม่ได้ถูกปล่อยออกมาทันที แต่หลังจากผ่านไประยะหนึ่งแล้ว