Objective-C không có không gian tên; nó giống như C, mọi thứ đều nằm trong một không gian tên toàn cầu. Thực tiễn phổ biến là các lớp tiền tố có chữ cái đầu, ví dụ nếu bạn đang làm việc tại IBM, bạn có thể đặt tiền tố cho chúng bằng "IBM"; nếu bạn làm việc cho Microsoft, bạn có thể sử dụng "MS"; và như thế. Đôi khi tên viết tắt đề cập đến dự án, ví dụ: các lớp tiền tố Adium với "AI" (vì không có công ty nào đứng sau dự án mà bạn có thể lấy tên viết tắt). Tiền tố của Apple có các lớp với NS và cho biết tiền tố này chỉ dành riêng cho Apple.
Cho đến nay rất tốt. Nhưng việc thêm 2 đến 4 chữ cái vào một tên lớp ở phía trước là một không gian tên rất, rất hạn chế. Ví dụ: MS hoặc AI có thể có một ý nghĩa hoàn toàn khác (ví dụ AI có thể là Trí tuệ nhân tạo) và một số nhà phát triển khác có thể quyết định sử dụng chúng và tạo ra một lớp có tên giống nhau. Bang , va chạm không gian tên.
Được rồi, nếu đây là sự va chạm giữa một trong các lớp của riêng bạn và một trong các khung bên ngoài bạn đang sử dụng, bạn có thể dễ dàng thay đổi cách đặt tên của lớp, không có vấn đề gì lớn. Nhưng nếu bạn sử dụng hai khung bên ngoài, cả hai khung mà bạn không có nguồn và bạn không thể thay đổi thì sao? Ứng dụng của bạn liên kết với cả hai và bạn nhận được xung đột tên. Làm thế nào bạn sẽ đi về giải quyết những điều này? Cách tốt nhất để làm việc xung quanh chúng theo cách mà bạn vẫn có thể sử dụng cả hai lớp là gì?
Trong C, bạn có thể giải quyết những vấn đề này bằng cách không liên kết trực tiếp đến thư viện, thay vào đó bạn tải thư viện khi chạy, sử dụng dlopen (), sau đó tìm biểu tượng bạn đang tìm kiếm bằng cách sử dụng dlsym () và gán nó cho biểu tượng toàn cầu (mà bạn có thể đặt tên theo bất kỳ cách nào bạn thích) và sau đó truy cập nó thông qua biểu tượng toàn cầu này. Ví dụ: nếu bạn có xung đột vì một số thư viện C có hàm tên là open (), bạn có thể xác định một biến có tên myOpen và để nó trỏ đến hàm open () của thư viện, do đó khi bạn muốn sử dụng hệ thống open () , bạn chỉ cần sử dụng open () và khi bạn muốn sử dụng cái khác, bạn truy cập nó thông qua định danh myOpen.
Có một cái gì đó tương tự có thể có trong Objective-C và nếu không, có giải pháp khéo léo, khéo léo nào khác mà bạn có thể sử dụng để giải quyết xung đột không gian tên không? Có ý kiến gì không?
Cập nhật:
Chỉ cần làm rõ điều này: các câu trả lời gợi ý cách tránh va chạm không gian tên trước hoặc cách tạo không gian tên tốt hơn chắc chắn được hoan nghênh; tuy nhiên, tôi sẽ không chấp nhận chúng là câu trả lời vì chúng không giải quyết được vấn đề của tôi. Tôi có hai thư viện và tên lớp của họ va chạm. Tôi không thể thay đổi chúng; Tôi không có nguồn của một trong hai. Vụ va chạm đã có và những lời khuyên về cách có thể tránh được trước sẽ không giúp được nữa. Tôi có thể chuyển tiếp chúng cho các nhà phát triển của các khung này và hy vọng họ chọn một không gian tên tốt hơn trong tương lai, nhưng hiện tại tôi đang tìm kiếm một giải pháp để làm việc với các khung ngay bây giờ trong một ứng dụng. Bất kỳ giải pháp để thực hiện điều này có thể?