2009-04-03 32 views
6

Ở nguy cơ quá tải một cái gì đó tôi lo lắng có thể phức tạp ridiculously, những gì tôi nên biết khi trộn C và Objective-C?Những cạm bẫy và gotchas của trộn Objective-C và C là gì?

Chỉnh sửa: Chỉ cần làm rõ, tôi chưa bao giờ làm việc với C trước đây và tôi đang học Objective-C thông qua Cocoa. Ngoài ra tôi đang sử dụng động cơ Chipmunk Dynamics, đó là C.

Trả lời

14

tôi muốn đặt nó theo cách khác xung quanh: bạn có thể mạo hiểm overcomplicating cái gì đó là ridiculously :-) đơn giản

Ok, tôi là một chút lém lỉnh. Như những người khác đang chỉ ra, Objective-C thực sự chỉ là một bộ mở rộng ngôn ngữ tối thiểu cho C. Khi bạn đang viết mã Objective-C, bạn đang thực sự viết C. Bạn thậm chí có thể truy cập các machinations bên trong của hỗ trợ thời gian chạy Objective-C sử dụng một số chức năng C tiện dụng là một phần của ngôn ngữ (không ... Tôi không khuyên bạn thực sự làm điều này trừ khi bạn thực sự biết những gì bạn đang làm).

Giới thiệu về thời gian duy nhất tôi từng có những khoảnh khắc nhẹ nhàng khó khăn là khi tôi muốn chuyển một phương thức thể hiện Objective-C làm gọi lại cho hàm C. Nói, ví dụ, tôi đang sử dụng một thư viện nền tảng cross-C có chức năng chấp nhận gọi lại. Tôi có thể gọi hàm từ bên trong một thể hiện đối tượng để xử lý một số dữ liệu, và sau đó muốn hàm C gọi hàm BACK của tôi khi nó được thực hiện, hoặc như là một phần của đầu vào bổ sung v.v. (một mô hình phổ biến trong C). Điều này có thể được thực hiện với gói chức năng funky, và một số phương pháp sáng tạo khác mà tôi đã thấy, và nếu bạn cần phải làm điều đó googling "mục tiêu c phương pháp cho c gọi lại" hoặc một cái gì đó như thế sẽ cung cấp cho bạn hàng hoá.

Lời khuyên duy nhất khác là đảm bảo rằng các đối tượng của bạn quản lý phù hợp bất kỳ bộ nhớ ed nào do họ tạo để sử dụng bởi các hàm C theo cách thủ công. Bạn sẽ muốn các lớp target-c của bạn dọn dẹp bộ nhớ đó trên dealloc nếu, thực sự, nó đã kết thúc.

Khác hơn thế, loại bỏ mọi tham chiếu về C và vui chơi!

7

Bạn không thể 'trộn' C và Objective-C: Objective-C là một siêu của C.

Bây giờ, C++ và Objective- C Mặt khác ...

+0

Tôi nên viết lại câu hỏi như thế nào? – gargantuan

+0

Nó không phải là vấn đề viết lại. Mục tiêu-C chứa tất cả C, vì vậy không có sự pha trộn nào cả. –

+1

Tôi nhận được bạn, nhưng nhớ tôi mới đến C trong bất kỳ hương vị, và học tập ca cao tập trung vào mục tiêu-C. Tuy nhiên, Chipmunk được viết bằng chữ C. Vì vậy, tôi đã bắt gặp một vấn đề mà Structs không phải là Object, mặc dù với một anh chàng mới, trông giống nhau lúc đầu. – gargantuan

1

Mục tiêu C là một siêu của C, do đó, nó không nên xung đột.

Ngoại trừ điều đó, như được chỉ here pure C có các quy ước khác nhau (rõ ràng là vì không có cơ chế tích hợp) để xử lý lập trình OO. Trong C, một đối tượng đơn giản chỉ là một (struct *) với các con trỏ hàm.

Các vấn đề liên quan