2010-05-31 34 views

Trả lời

16

Đối với các hằng số "công cộng", bạn khai báo nó như extern trong tập tin tiêu đề của bạn (.h) và khởi tạo nó trong tập tin thực thi của bạn (.m).

// File.h 
extern int const foo; 

sau đó

// File.m 
int const foo = 42; 

Xem xét sử dụng enum nếu nó không chỉ là một, nhưng nhiều hằng số thuộc cùng

+0

Nếu tôi cần 'typedef NS_ENUM' thì sao? – ManuQiao

12

lớp C Mục tiêu không hỗ trợ hằng như các thành viên. Bạn không thể tạo một hằng số theo cách bạn muốn.

Cách gần nhất để khai báo hằng số liên kết với một lớp là xác định phương thức lớp trả về nó. Bạn cũng có thể sử dụng extern để truy cập trực tiếp các hằng số. Cả hai được thể hiện dưới đây:

// header 
extern const int MY_CONSTANT; 

@interface Foo 
{ 
} 

+(int) fooConstant; 

@end 

// implementation 

const int MY_CONSTANT = 23; 

static const int FOO_CONST = 34; 

@implementation Foo 

+(int) fooConstant 
{ 
    return FOO_CONST; // You could also return 34 directly with no static constant 
} 

@end 

Ưu điểm của phiên bản phương thức lớp là có thể mở rộng để cung cấp các đối tượng liên tục khá dễ dàng. Bạn có thể sử dụng các đối tượng bên ngoài, nut bạn phải khởi tạo chúng trong một phương thức khởi tạo (trừ khi chúng là các chuỗi). Vì vậy, bạn sẽ thường thấy các mô hình sau:

// header 
@interface Foo 
{ 
} 

+(Foo*) fooConstant; 

@end 

// implementation 

@implementation Foo 

+(Foo*) fooConstant 
{ 
    static Foo* theConstant = nil; 
    if (theConstant == nil) 
    { 
     theConstant = [[Foo alloc] initWithStuff]; 
    } 
    return theConstant; 
} 

@end 
+0

Đã thêm một chút nữa mà tôi vừa mới nghĩ đến là đẹp hơn – JeremyP

+0

. Nó có thể là thú vị để xác định rằng các mô hình bạn đã viết được gọi là singleton và thường được sử dụng để chia sẻ công cụ tất cả các ứng dụng. Một ví dụ hay trong iPhone dev là lớp AppDelegate. – moxy

0

Một cách đơn giản cho kiểu giá trị hằng số như số nguyên là sử dụng enum hack như ám bởi unbeli.

// File.h 
enum { 
    SKFoo = 1, 
    SKBar = 42, 
}; 

Một lợi thế cho việc này bằng cách sử dụng extern là tất cả đều được giải quyết lúc biên dịch nên không cần bộ nhớ để giữ các biến.

Phương pháp khác là sử dụng static const đó là những gì đã được thay thế cho enum hack trong C/C++.

// File.h 
static const int SKFoo = 1; 
static const int SKBar = 42; 

Quét nhanh qua tiêu đề của Apple cho thấy phương pháp enum hack dường như là cách ưa thích thực hiện điều này trong Mục tiêu-C và tôi thực sự thấy rõ hơn và sử dụng nó.

Ngoài ra, nếu bạn đang tạo nhóm tùy chọn, bạn nên cân nhắc sử dụng NS_ENUM để tạo hằng số an toàn.

// File.h 
typedef NS_ENUM(NSInteger, SKContants) { 
    SKFoo = 1, 
    SKBar = 42, 
}; 

Thông tin thêm về NS_ENUM và đó là anh em họ NS_OPTIONS có sẵn tại NSHipster.

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