2013-05-15 28 views
7

Outlets thể được tạo ra như thế nàyIBOutlets mạnh hay yếu

@interface SearchViewController : UIViewController<UISearchBarDelegate> {  
    IBOutlet UIView *viewSearchBar; 
    IBOutlet UIScrollView *scrollVieww; 
    IBOutlet UILabel *lblName; 
} 

và cũng như thế này

@interface SearchViewController : UIViewController<UISearchBarDelegate> { 

} 

@property(nonatomic, weak) IBOutlet UIScrollView *scrollVieww; 
@property(nonatomic, weak) IBOutlet UIView *viewSearchBar; 
@property(nonatomic, weak) IBOutlet UILabel *lblName; 

@end 

Tôi biết nonatomic/atomicstrong/weak trong ARC, nhưng trong ví dụ đầu tiên những gì là họ? strong, weak, nonatomic hoặc atomic.

Vui lòng giải thích hoặc liên kết tôi với một số chi tiết.

+1

Thực sự không quan trọng nếu cửa hàng thuộc về Theo quan điểm được khai báo mạnh hoặc yếu trong ARC vì khung nhìn sẽ có tham chiếu mạnh mẽ đến phần tử. – Joe

+0

@ Joe có tôi đồng ý nhưng vẫn muốn biết, họ là gì –

+0

@ lxt tôi đã xem câu hỏi này trước đây, nó không rõ ràng tôi cho điều này –

Trả lời

7

Biến mẫu trong ARC là mạnh theo mặc định. Và chúng không phải là nguyên tử hay nonatomic, vì chúng chỉ là các biến mẫu và không phải là các phương thức truy cập. Cờ nguyên tử/nonatomic có liên quan đến đa luồng. Họ xác định có hay không các phương thức truy cập phải là nguyên tử. Khi một accessor là nguyên tử, việc thực hiện không thể thay đổi thành một thread khác ở giữa phương thức accessor. Khi nó là nonatomic, không có hạn chế như vậy.

Lưu ý: IBOutlet là kiểu chữ không có gì. Nó chỉ là một lá cờ cho Interface Builder và không có chức năng liên quan đến bộ nhớ.

+2

+1 Nhân tiện, (và tôi biết bạn đã biết điều này rồi, nhưng vì lợi ích của người đọc trong tương lai), tôi hy vọng người đọc không giải thích nhận xét của bạn như gợi ý rằng làm cho nó 'nguyên tử' đảm bảo an toàn chủ đề. Nó không. Xem [Thuộc tính là nguyên tử theo mặc định] (http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/EncapsulatingData/EncapsulatingData.html#//apple_ref/doc/uid/TP40011210-CH5-SW37) trong hướng dẫn _Programming with Objective-C_. – Rob

+0

Đối với những người tự hỏi định nghĩa chính xác của 'IBOutlet' là gì (từ tài liệu): Mã định danh được sử dụng để xác định thuộc tính để Interface Builder có thể đồng bộ hóa hiển thị và kết nối các cửa hàng với Xcode. Chèn số nhận dạng này ngay trước loại trong bất kỳ khai báo nào. –

3

Quy tắc chung về ngón tay cái, bất kỳ thứ gì có số IBOutlet phải được khai báo là yếu.

Hãy xem weak or strong for IBOutlet and other.

+0

Cảm ơn bạn đã liên kết câu trả lời của tôi;) –

+1

+1 Bất kỳ điều gì (ngoại trừ các đối tượng cấp cao nhất, điều bất thường là bạn đã từng có 'IBOutlet' của riêng mình cho điều đó). Xem [Quản lý thời gian sống của các đối tượng] (https://developer.apple.com/library/ios/DOCUMENTATION/Cocoa/Conceptual/LoadingResources/CocoaNibs/CocoaNibs.html#//apple_ref/doc/uid/10000051i-CH4-SW6) trong Hướng dẫn lập trình tài nguyên. – Rob

5

biến được __strong theo mặc định dưới ARC vậy:

IBOutlet UIView *viewSearchBar;

cũng giống như

IBOutlet __strong UIView *viewSearchBar;

liên quan đến các cách khuyến khích Với để đối phó với IBOutlets dưới ARC xem: the answer to this

+0

vì vậy chúng ta nên sử dụng phương pháp thứ 2? –

+0

Như ông đã nói, chúng giống nhau. Không quan trọng. Tôi khuyên bạn nên bỏ qua nó, và chỉ rõ ràng một cái gì đó mạnh mẽ khi nó thực sự quan trọng hoặc bất ngờ. – DrummerB

+3

Thực sự khuyên rằng IBOutlets nói chung là yếu. Xem câu hỏi được liên kết tôi đã thêm vào câu trả lời. –

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