seen from Taiwan
seen from United States
seen from United States
seen from India
seen from United States
seen from Türkiye
seen from China
seen from United Kingdom
seen from China
seen from United States
seen from United States

seen from Malaysia

seen from United States
seen from United States

seen from United States

seen from United States
seen from Canada

seen from United States

seen from Poland
seen from China
Luôn prefix tên của một category trong một thư viện được chia sẻ
Giả sử bạn muốn viết một category để bổ xung thêm chức năng liên quan đến HTTP URL vào class NSString
@interface NSString (HTTP) // Encode a string with URL encoding - (NSString*)urlEncodedString; // Decode a URL encoded string - (NSString*)urlDecodedString; @end
Nếu một category khác cũng thêm vào class NSString method với tên là urlEncodedString nhưng với implementation khác và nó được load sau category đầu tiên thì code của bạn sẽ gọi implementation của nó và có thể khiến cho code chạy không như mong muốn của bạn. Lỗi này khó mà tìm ra vì bạn có thể không biết rằng implementation của category của bạn không được gọi.
Cách thông thường để xử lý vấn đề này là namespace tên của category và tên các method của nó. Trong Objective-C, cách duy nhất để namespace là dùng prefix. Thường thì prefix này được dùng xuyên suốt cả bộ code của bạn. Ví dụ trên có thể viết thành:
@interface NSString (TTH_HTTP) // Encode a string with URL encoding - (NSString*)tth_urlEncodedString; // Decode a URL encoded string - (NSString*)tth_urlDecodedString; @end
Ở trên, tôi dùng prefix là "TTH" với 3 chữ cái đầu của họ và tên tôi(Trần Tuấn Hải). Đúng ra thì bạn chả cần phải prefix tên của category mà chỉ cần prefix tên của method trong category. Không có gì sai khi bạn có 2 category trùng tên. Nhưng đó không phải là cách được khuyên dùng. Ví dụ bạn sẽ nhận được một compiler warning như sau nếu có 2 category trùng tên là HTTP
warning: duplicate definition of category 'HTTP' on interface NSString
Ghi nhớ
Luôn prefix tên của category và tên các method trong category mà bạn thêm vào class mà bạn không sở hữu
More important than what you use is ensuring that you stick to it!
CamelCase vs under_score