ฉันมีออบเจ็กต์หลายอย่างในแอปของฉันที่อาจกลายเป็นศูนย์ได้ในบางจุด และฉันมีวิธีการที่ในทางทฤษฎีใช้ในการทำให้ออบเจ็กต์เหล่านี้กลายเป็นศูนย์
แต่ถ้าฉันพยายามทำให้ไม่มีวัตถุที่ไม่มีอยู่ แอปก็จะหยุดทำงาน
ตัวอย่างเช่น...
[object1 release];
object1 = nil;
//... และหลังจากนั้น
[object1 removeFromSuperview]; // this will crash
แล้วฉันก็คิดว่าทำไมไม่ทดสอบเพื่อดูว่ามีวัตถุอยู่ก่อนที่จะลบออก...
if (object1 != nil)
[object1 removeFromSuperview];
// this will crash too, because object1 cannot be tested for nil because it does not exist
ฉันจะตรวจสอบได้อย่างไรว่ามีวัตถุอยู่ก่อนทดสอบว่าไม่มีหรือไม่ บางสิ่งบางอย่างเช่น
if (object1 exists( {
if(object1 != nil))
[object1 removeFromSuperview)
}
เป็นไปได้ไหม?
ฉันเพิ่มสิ่งนี้เพื่อชี้แจง...
สิ่งที่ฉันหมายถึงคือ: ลองนึกภาพฉันมี object1 ประกาศบนส่วนหัวและเริ่มต้นในโค้ด ดังนั้นจึงมีอยู่และชี้ไปที่ข้อมูลอ้างอิงที่ถูกต้อง ณ จุดหนึ่ง วัตถุอาจถูกปล่อยออกมา ดังนั้นการอ้างอิงยังคงชี้ไปที่วัตถุแต่วัตถุนั้นถูกทำให้เป็นอิสระ แม้ว่าฉันจะทำให้วัตถุเป็นศูนย์หลังจากปล่อย ฉันก็ไม่สามารถทำอะไรกับมันได้
ปัญหาคือ: ฉันมีวิธีการบางอย่างที่ไม่ตรงกัน หนึ่งในนั้นจะสแกนหาวัตถุบางอย่างและนำออกหากพบ ฉันต้องตรวจสอบว่ามีวัตถุอยู่หรือไม่และการอ้างอิงชี้ไปยังวัตถุที่ถูกต้องก่อนปล่อยอีกครั้ง นี่คือประเด็น: ฉันจะทดสอบได้อย่างไรว่ามีออบเจ็กต์อยู่และการอ้างอิงของมันชี้ไปยังออบเจ็กต์ที่มีอยู่ที่ถูกต้องก่อนที่จะปล่อยมันอีกครั้ง เพื่อทำให้การปล่อยออบเจ็กต์ที่เผยแพร่แล้วเป็นโมฆะอีกครั้งและทำให้แอปเสียหาย