ฉันคิดว่าในชั้นเรียนส่วนใหญ่ถ้าค่าตอบแทนจาก [super init] เป็นศูนย์และคุณตรวจสอบตามที่แนะนำโดยวิธีปฏิบัติมาตรฐานแล้วส่งคืนก่อนกำหนดหากไม่มีศูนย์โดยทั่วไปแอปของคุณจะยังทำงานไม่ถูกต้อง หากคุณคิดเกี่ยวกับมันแม้ว่าถ้า (ตัวเอง! = ไม่มี) การตรวจสอบจะมีการดำเนินงานที่เหมาะสมของชั้นเรียนของคุณ, 99.99% ของเวลาที่คุณจริงทำความต้องการตัวเองให้เป็นที่ไม่ใช่ศูนย์ ทีนี้สมมติว่าไม่ว่าด้วยเหตุผลใดก็ตาม [super init] ก็คืนค่าศูนย์โดยทั่วไปการตรวจสอบของคุณต่อศูนย์จะส่งผ่านบั๊กไปยังผู้โทรในชั้นเรียนของคุณซึ่งมันอาจจะล้มเหลวอยู่ดี ที่ประสบความสำเร็จ
โดยทั่วไปสิ่งที่ฉันได้รับคือ 99.99% ของเวลาถ้า (ตัวเอง! = ไม่มี) ไม่ซื้ออะไรเลยในแง่ของความแข็งแกร่งมากขึ้นเนื่องจากคุณเพิ่งผ่านเจ้าชู้ไปยังผู้เรียกร้องของคุณ เพื่อให้สามารถจัดการกับสิ่งนี้ได้อย่างสมบูรณ์คุณจะต้องทำการตรวจสอบในลำดับชั้นการโทรทั้งหมดของคุณ และถึงอย่างนั้นสิ่งเดียวที่จะซื้อคุณก็คือแอปของคุณจะล้มเหลวเล็กน้อย / เรียบร้อยดีขึ้น แต่มันก็จะล้มเหลว
หากคลาสห้องสมุดตัดสินใจโดยไม่มีกฎเกณฑ์ที่จะคืนค่าใด ๆ อันเป็นผลมาจาก [super init] คุณก็ค่อนข้างจะดีอยู่ดีและนั่นเป็นข้อบ่งชี้ว่าผู้เขียนของคลาสไลบรารีนั้นผิดพลาดในการนำไปใช้
ฉันคิดว่านี่เป็นคำแนะนำในการเข้ารหัสแบบดั้งเดิมมากกว่าเดิมเมื่อแอพทำงานในหน่วยความจำที่ จำกัด มากขึ้น
แต่สำหรับรหัสระดับ C ฉันยังคงมักจะตรวจสอบค่าส่งคืนของ malloc () กับตัวชี้ NULL ในขณะที่สำหรับ Objective-C จนกระทั่งฉันพบหลักฐานไปในทางตรงกันข้ามฉันคิดว่าฉันมักจะข้ามการตรวจสอบ if (self! = nil) ทำไมความแตกต่าง?
เพราะที่ระดับ C และ malloc ในบางกรณีคุณสามารถกู้คืนได้จริงบางส่วน ในขณะที่ฉันคิดว่าใน Objective-C ใน 99.99% ของกรณีถ้า [super init] กลับมาเป็นศูนย์คุณจะ f *** ed แม้ว่าคุณจะพยายามจัดการมัน คุณอาจปล่อยให้แอปพังและจัดการกับผลที่ตามมา