2011-06-20 39 views
7

thể trùng lặp:
Constants in Objective CLàm thế nào để xác định đúng hằng

Tôi đang thiết kế một bộ điều khiển và tôi sẽ cần một số hằng số bên trong nó (tại địa phương, chỉ dành riêng cho điều khiển đó) . Nhìn vào một số mã mẫu do Apple cung cấp, tôi có thể thấy các dòng sau:

#import "Constants.h" 

#define kTextFieldWidth 260.0 

static NSString *kSectionTitleKey = @"sectionTitleKey"; 
static NSString *kSourceKey = @"sourceKey"; 
static NSString *kViewKey = @"viewKey"; 

const NSInteger kViewTag = 1; 

Bất cứ ai có thể giải thích cho tôi sự khác biệt giữa chúng là gì? Tôi nên sử dụng kiểu nào? Chúng có phụ thuộc vào loại đối tượng/giá trị mà bạn gán cho chúng không? Ý nghĩa sử dụng: static NSString * cho chuỗi, #define cho phao và NSInteger cho số nguyên? Làm thế nào để bạn thực hiện sự lựa chọn?

+0

Câu trả lời hay nhất [ở đây] (http://stackoverflow.com/questions/538996/constants-in-objective-c). –

Trả lời

0

Vì Scott và benzado chỉ ra that is the best way để xác định các giá trị không đổi của bạn. Tuy nhiên theo như định nghĩa đi nó là khó khăn hơn để gỡ lỗi bằng cách sử dụng định nghĩa như bạn thường có thể không dễ dàng nhìn thấy giá trị mở rộng trong một trình gỡ lỗi. Bạn sẽ chỉ cần thêm một khai báo extern vào tệp tiêu đề của lớp nếu ý định của bạn là để lộ biến toàn cầu. Và điều tiếp theo cần nhớ là đặt tuyên bố const sau con trỏ (*) nếu không bạn sẽ nhận được cảnh báo loại bỏ vòng loại khỏi con trỏ trong hầu hết các lần sử dụng.

+0

cảm ơn, sau khi chơi xung quanh và đọc thêm một số khám phá mà tôi đã hiểu được :) – Hidden

5

Từ khóa #define là một chỉ thị thời gian biên dịch làm cho giá trị được định nghĩa được chèn trực tiếp vào mã của bạn. Nó là toàn cầu trên toàn bộ chương trình và tất cả các thư viện liên kết. Vì vậy, bạn có thể tấn công mà ra khỏi danh sách, dựa trên mong muốn của bạn để tạo ra một hằng số cho bộ điều khiển chỉ.

Sự khác biệt chính giữa tĩnh và const là biến tĩnh có thể thay đổi sau khi khởi tạo, const không thể thay đổi. Nếu bạn muốn có thể sửa đổi biến sau khi khởi tạo thì bạn nên sử dụng từ khóa tĩnh tĩnh.

Hy vọng điều đó sẽ hữu ích.

+0

thẳng đến điểm và súc tích. Cảm ơn bạn, tôi hoàn toàn có nó! :) – Hidden

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