Swift - วิธีใช้ malloc?

ฉันกำลังพยายามแปลแอป Objective-C เป็น Swift และฉันไม่รู้วิธีใช้งาน malloc

ใช้กับ Swift ได้ไหม?

ขอบคุณ


person MeV    schedule 18.11.2014    source แหล่งที่มา
comment
หากคุณต้องการใช้ malloc เพื่อจัดสรรหน่วยความจำจำนวนหนึ่ง คุณไม่จำเป็นต้องดำเนินการดังกล่าว การจัดสรรหน่วยความจำโดยตรงไม่ได้ใช้ใน Swift   -  person Kyokook Hwang    schedule 18.11.2014
comment
@KyokookHwang: คุณ สามารถ ใช้ malloc() ได้โดยไม่มีปัญหาใน Swift คำถามคือคุณ ควร ทำมันหรือใช้โครงสร้างข้อมูลอื่น (เช่น Array) ดีกว่าหรือไม่   -  person Martin R    schedule 18.11.2014
comment
มันจะช่วยให้เห็นปัญหาที่เป็นรูปธรรมของคุณ malloc() สามารถใช้ได้ แต่อาจมีทางเลือกอื่นที่ดีกว่า   -  person Martin R    schedule 18.11.2014
comment
ขอบคุณ. ความต้องการของฉันคือการจัดสรรหน่วยความจำบางส่วนสำหรับบัฟเฟอร์เสียง: buffer.mData = malloc( inNumberFrames * 2 ); // ขนาดบัฟเฟอร์   -  person MeV    schedule 18.11.2014
comment
ฉันอาจจะพบวิธีแก้ปัญหาอื่นแล้ว ขอบคุณ   -  person MeV    schedule 18.11.2014
comment
ดูคำตอบของฉันที่นี่: stackoverflow.com/a/26006918/341994   -  person matt    schedule 27.11.2014


คำตอบ (1)


คุณต้องใช้ส่วนหัวการเชื่อมโยงเมื่อคุณใช้ ObjC หรือ C จาก Swift ฟังก์ชั่นที่ส่งออกโดยส่วนหัวการเชื่อมต่อของคุณจะพร้อมใช้งานในแอป/โมดูล Swift ของคุณ ดูภาพรวมที่นี่

หากคุณเพียงแค่ต้อง "เรียกโค้ด" บนฝั่ง C ฟังก์ชั่นที่ส่งออกจาก C นั้นโดยพื้นฐานแล้วเป็นเพียง wrappers สำหรับ Swift อย่างไรก็ตาม หากคุณต้องการโต้ตอบกับข้อมูลที่ส่งคืนจากฟังก์ชันเหล่านั้น โดยเฉพาะอย่างยิ่งหาก malloc'd และไม่ใช่ข้อมูลพื้นฐานอย่างง่าย Swift มีประเภทที่เกี่ยวข้องกับ C หลายประเภทพร้อมสำหรับการใช้งานของคุณ (ดู ที่นี่เพื่อดูข้อมูลเฉพาะเจาะจง ).

นอกจากนี้ หากคุณกำลังพยายามล้อมหรือโต้ตอบกับโค้ด C++ คุณจะไม่สามารถดำเนินการดังกล่าวได้โดยตรงจาก Swift คุณต้องตั้งค่าอินเทอร์เฟซเริ่มต้นด้วย ObjC หรือ C สำหรับโค้ด C ++ จากนั้นจึงเชื่อมโยงสิ่งนั้นกับ Swift ไม่สนุกเลย แต่โชคดีที่กรณีการใช้งานไม่ธรรมดาเท่ากับการเชื่อมโยง ObjC (โดยหลัก) หรือ C

... และสิ่งที่คุ้มค่า เว้นแต่คุณจะต้องการ Core Audio ระดับต่ำด้วยเหตุผลบางประการ (เช่น การย้ายแอปที่คุณมีอยู่แล้ว) AVAudioEngine (iOS8+) นั้น ดังนั้น ง่ายกว่ามากสำหรับการใช้งานที่เกี่ยวข้อง ดีกว่า Core Audio และพร้อมใช้งานใน Swift

person greymouser    schedule 18.11.2014
comment
…สำหรับกรณีการใช้งานที่เกี่ยวข้อง เกือบทุกกรณี แต่มีหลายอย่างที่ AVAudioEngine ยังทำได้ไม่ดีพอ สองปีหลังจากการแสดงความคิดเห็นนี้ - person Steve Cotner; 18.03.2017