Tôi cần tạo một biến mẫu của loại BOOL
với giá trị mặc định là False
trong một trong các lớp Objective-C của tôi. Làm thế nào để tôi làm điều này? Tôi đã nhìn thấy mọi người xác định nó trong tập tin .h của họ nhưng tôi không thực sự cần biến này để được công khai. Vì vậy, tôi không nên đặt nó trong tập tin .m của tôi? Ngoài ra, tôi có nên biến nó thành tài sản không? Hoặc tôi có nên không làm một cái gì đó một tài sản? Cảm ơn.Làm thế nào để tạo một biến cá thể BOOL trong mục tiêu c?
Trả lời
Tôi cần phải tạo biến mẫu của loại BOOL với giá trị mặc định là FALSE trong một trong các lớp c mục tiêu của tôi. Làm thế nào để tôi làm điều này?
Giả sử bạn đang sử dụng Xcode hiện tại, bạn có thể khai báo Ivar trong việc thực hiện như thế này:
@implementation MyClass
{
@private
BOOL myBool;
}
Tôi đã nhìn thấy mọi người định nghĩa nó trong file .h của họ nhưng tôi don' t thực sự cần biến này để được công khai.
Trước đây, bạn phải khai báo các biến mẫu trong @interface
do cách thức các lớp được triển khai. Điều này hiện chỉ cần thiết nếu bạn đang nhắm mục tiêu đến 32 bit OS X.
Ngoài ra, tôi có nên biến nó thành tài sản không?
Điều đó tùy thuộc. Bạn chắc chắn sẽ làm cho nó trở thành một thuộc tính nếu nó là một phần của API bên ngoài của lớp của bạn (đối với các lớp không liên quan hoặc các lớp con để sử dụng. Nếu nó chỉ là một phần của trạng thái bên trong của đối tượng, bạn không cần biến nó thành thuộc tính (và I don ') t).
Hoặc tôi nên bao giờ không làm một cái gì đó một tài sản? Cảm ơn.
Nếu bạn không sử dụng ARC và loại là một loại đối tượng (BOOL không), bạn nên luôn luôn làm cho nó Nếu bạn là bằng ARC, lời khuyên trong danh sách nhà phát triển của Apple là tạo nội dung là một phần của thuộc tính API và nội dung là trạng thái nội bộ dưới dạng ivars.
Lưu ý rằng, ngay cả đối với trạng thái nội bộ, bạn có thể muốn sử dụng KVO, trong trường hợp này, hãy sử dụng thuộc tính.
Nếu bạn khai báo BOOL này là tài sản và tổng hợp nó, bạn không cần phải khai báo rõ ràng ivar. Nếu bạn muốn làm cho tài sản "nhìn thấy" chỉ đến lớp đó, sử dụng một phần mở rộng lớp
@interface MyClass()
@property (assign) BOOL myBool;
@end
@implementation MyClass
@synthesize myBool = myBool_; // creates an ivar myBool_ to back the property myBool.
@end
Lưu ý rằng, mặc dù các trình biên dịch sẽ tạo ra cảnh báo cho ở trên, tại thời gian chạy, bất kỳ lớp có thể gửi setMyBool:
hoặc myBool
đối tượng của MyClass
.
Nếu bạn đặt thuộc tính là công khai. Nếu bạn không muốn biến được công khai, hơn là không sử dụng thuộc tính. Tại sao bạn không muốn công khai? Bạn có thể có tài sản chỉ đọc và làm cho bạn có thể ghi trong .m thông qua một danh mục riêng tư.
Bạn có thể đặt nó trong file .m của bạn nếu bạn sử dụng iOS 5
@implementation MyClass {
BOOL _myBool;
}
Tôi nghĩ rằng đây là mới để iOS5. Nhưng tôi cũng đã thấy mã như thế này:
@implementation MyClass {
@private
BOOL _myBool;
}
Hy vọng điều này sẽ hữu ích.
"Nếu bạn đặt tài sản thành công khai". Trên thực tế, không. Thuộc tính có thể được khai báo riêng trong một phần mở rộng hoặc loại của lớp. – jlehr
Nhưng nếu bạn không làm gì, chúng được công khai. – Pfitz
Nếu bạn không làm gì cả, bạn không có gì. Điều gì xác định liệu một phương thức hay thuộc tính là công khai là nơi nó được khai báo. Nếu nó được khai báo trong tiêu đề, nó sẽ hiển thị công khai; nếu không thì không. (Không có thực thi thời gian chạy mặc dù.) – jlehr
BOOL được khai báo là iVars với đơn giản BOOL myBool
và là thuộc tính với @property (nonatomic, assign) BOOL myBool
. Lưu ý rằng, các giá trị BOOLean được khởi tạo thành NO (nil). Nếu bạn cần một BOOL để có thể truy cập từ các lớp khác, hoặc "toàn cục" trong tệp m, hãy sử dụng một iVar hoặc một thuộc tính, nếu không thì chỉ cần khai báo chúng như là các vlog được scoped theo một phương thức riêng lẻ.
Nếu bạn muốn tạo biến riêng tư, bạn có thể sử dụng sức mạnh của các danh mục. Thực hiện một MyClass lớp ví dụ và trong file .m thực hiện như sau:
#import "MyClass.h"
@interface MyClass() //This is an empty category on MyClass class
@property (nonatomic, assign) BOOL myBool;
@end
@implementation MyClass
@synthesize myBool = _myBool;
-(void)myMethod {
self.myBool = YES; //this is using the property
_myBool = NO; //this is the instance variable, as @synthesize creates an instance variable for you
// both are private
}
@end
Bạn có thể đặt việc kê khai trong hồ sơ .m
.
Cho dù bạn tạo tài sản ra khỏi nó, phụ thuộc vào những gì bạn muốn. Là một tài sản, sau này bạn có thể áp dụng setter/getter bao gồm kiểm tra/bảo vệ/bất cứ điều gì. Ngoài ra, bạn có thể áp dụng khóa-giá trị truy cập.
Nếu bạn không cần một trong những điều này, không có nhu cầu thực sự cho một tài sản (nhưng một truyền thống tốt: bạn không bao giờ biết, làm thế nào mã của bạn sẽ phát triển).
tôi sử dụng 0, 1 thay YES, NO
#define YES 1
#define NO 0
- 1. Cách sử dụng biến tĩnh (BOOL) trong Mục tiêu C
- 2. Trong mục tiêu-C, chúng ta có thể đặt các biến cá thể trong phần @implementation?
- 3. Làm thế nào để tạo một NSMutableArray tĩnh trong một lớp trong mục tiêu c?
- 4. Mục tiêu-C - Có !! BOOL Beneficial
- 5. Từ điển mục tiêu-C chèn một BOOL
- 6. Làm thế nào để biến một thể hiện Động vật thành một cá thể Dog?
- 7. Làm thế nào để khởi tạo một NSMutableArray trong mục tiêu C?
- 8. làm thế nào để in characterSet trong mục tiêu c?
- 9. C# không thể bool bool để int
- 10. Khởi tạo biến tĩnh trong loại Mục tiêu-C
- 11. Làm thế nào để một giao thức trên một biến cá thể trong Objective-C hoạt động?
- 12. Làm thế nào để tạo cá thể mặc định sau khi tạo một cá thể có tên?
- 13. Làm cách nào để thêm biến vào danh mục trong Mục tiêu-C?
- 14. Làm thế nào để thiết lập một tài sản kiểu boolean trong lớp C Mục tiêu
- 15. Làm thế nào tôi có thể gọi một phương thức trong Mục tiêu-C?
- 16. Làm cách nào để tạo một mảng CGFloats trong mục tiêu c?
- 17. Làm cách nào để gọi một hàm mục tiêu C?
- 18. Làm thế nào để gọi một Phương pháp Mục tiêu-C từ Phương pháp C?
- 19. Mục tiêu-c: Làm thế nào tôi có thể lấy dụ lớp trong phương thức lớp
- 20. Mục tiêu C - Làm thế nào để sử dụng các biến extern?
- 21. Làm thế nào để khởi tạo một biến const bên trong một struct trong C?
- 22. mục tiêu cơ bản C biến khai
- 23. Làm thế nào để sao chép một UIButton trong mục tiêu C?
- 24. Làm thế nào để an toàn cast một System.Object vào một `bool` trong C#?
- 25. Làm thế nào để tạo ra một đại biểu đến một mục tiêu với số biến của các đối
- 26. Làm thế nào để kiểm tra nếu một nguyên thủy trong Mục tiêu-C là nil?
- 27. Làm thế nào để nhắc cho biến Makefile mục tiêu cụ thể nếu không xác định?
- 28. Cách mục tiêu-C của việc nhận một bool nullable là gì?
- 29. C++: Làm thế nào một hàm thành viên tĩnh công khai truy cập các biến thành viên cá thể riêng?
- 30. Chuyển Biến Javascript thành Mục tiêu-C
Hãy thử: '- (void) {viewDidLoad BOOL flag = NO; } '. Cũng một khi bạn muốn khai báo trong nó .m tập tin bạn không thể bất động sản tổng hợp nó từ một tập tin .m. –
Tôi nên xác định 'cờ' ở đâu? Nó không có ý nghĩa trong tập tin .m? Tuy nhiên, tôi không thể tìm ra cú pháp cho nó. Thx – Nosrettap
xác định thuộc tính trong lớp .m như bạn làm trong .h .. nó sẽ biến bool thành lớp không thể truy cập từ bên ngoài. – iphonic