ผมทดสอบออกบางswizzling ISAกับสวิฟท์และพบว่ามันทำงานเฉพาะเมื่อ NSObject เป็นซุปเปอร์ชั้น (โดยตรงหรือเพิ่มขึ้นต่อไป) หรือโดยการใช้ '@objc' ตกแต่ง มิฉะนั้นจะเป็นไปตามรูปแบบการจัดส่งแบบคงที่และแบบ vtable เช่น C ++
เป็นเรื่องปกติหรือไม่ที่จะกำหนดคลาส Swift โดยไม่มีคลาสพื้นฐานของ Cocoa / NSObject หากเป็นเรื่องที่ฉันกังวลนี่หมายถึงพลวัตของ Objective-C ที่กล่าวมาข้างต้นเช่นการสกัดกั้นวิธีการและการวิปัสสนาแบบรันไทม์
พฤติกรรมเวลาทำงานแบบไดนามิกนั่งอยู่ในหัวใจของคุณสมบัติเช่นสังเกตการณ์คุณสมบัติหลักข้อมูลที่มุมมอง Oriented Programming , อุดมศึกษาสั่งซื้อการส่งข้อความ , การวิเคราะห์และกรอบการเข้าสู่ระบบและอื่น ๆ
การใช้รูปแบบการเรียกใช้เมธอดของ Objective-C จะเพิ่มตัวถูกดำเนินการรหัสเครื่องประมาณ 20 ตัวให้กับการเรียกใช้เมธอดดังนั้นในบางสถานการณ์ (การเรียกใช้เมธอดที่มีขนาดเล็กจำนวนมาก ) การจัดส่งแบบสแตติกและ vtable สไตล์ C ++ สามารถทำงานได้ดีขึ้น
แต่ด้วยกฎ 95-5 ทั่วไป ( 95% ของประสิทธิภาพที่เพิ่มขึ้นมาจากการปรับแต่งโค้ด 5% ) มันสมเหตุสมผลหรือไม่ที่จะเริ่มต้นด้วยคุณสมบัติไดนามิกที่ทรงพลังและทำให้แข็งขึ้นเมื่อจำเป็น?