2012-05-07 18 views
8
#import <UIKit/UIKit.h> 
#import "UCMapviewController.h" 
#import "UCMenuviewController.h" 
#import "UCOverviewController.h" 

@interface UCRootViewController : UIViewController 

@property (weak, nonatomic) UCMapviewController *mapviewController; 
@property (weak, nonatomic) UCMenuviewController *menuviewController; 
@property (weak, nonatomic) UCOverviewController *overviewController; 

Đây là khai báo của UCRootViewController mà sẽ quản lý các sub-viewControllers này. Anh ta sau này cũng sẽ trở thành đại biểu của họ để xử lý khi một bộ điều khiển được hiển thị hay không.thuộc tính yếu hoặc mạnh đối với chế độ xem phụ của tôiControllers?

RootViewController được giữ vững trong UIAppDelegate và sẽ vẫn hoạt động mọi lúc.

Vì vậy, chính xác để làm cho các chế độ xem phụ đó yếu hơn? Tôi không chắc chắn 100%, nhưng theo như tôi hiểu, các con trỏ yếu được giải quyết khi không có con trỏ mạnh trỏ đến chúng. Vì vậy, như gốc là mạnh mẽ, nó là chính xác để làm cho họ yếu, phải không?

#import <UIKit/UIKit.h> 

@class UCRootViewController; 
@interface UCOverviewController : UIViewController 

@property (weak, nonatomic) UCRootViewController *rootviewController; 

Đây là tiêu đề của một trong các chế độ xem con của tôiControllers. Họ có một con trỏ yếu tới (root) delegate rootviewController. Có đủ để khai báo @class UCRootviewController để họ gọi các phương thức đại biểu không? Tôi thậm chí cần điều này?

nhờ

EDIT: Tôi chỉ đọc a nice article about ViewControllers và việc thông qua:

Luôn luôn sử dụng chất lượng cao container view controller hoặc + [UIViewController presentModalViewController: hoạt hình:] để hiển thị xem các bộ điều khiển trong ứng dụng của bạn . Nếu bạn cần giữ một tham chiếu cho bộ điều khiển chế độ xem ở đâu đó, hãy sử dụng tham chiếu yếu, ngoại trừ nếu bạn thực sự muốn nó tồn tại lâu hơn cho mục đích lưu vào bộ nhớ cache. Trong các trường hợp như vậy , hãy đảm bảo phản hồi chính xác các điều kiện bộ nhớ thấp.

Nó nói sử dụng tham chiếu yếu, ý kiến ​​của bạn về điều này là gì?

+2

Nó nói sử dụng các tham chiếu yếu khi sử dụng các vùng chứa sử dụng bản thân mạnh mẽ cho Viewcontroller của bạn. Như tôi đã viết trong câu trả lời của tôi, khi bạn ví dụ sử dụng một bộ điều khiển điều hướng bạn tốt bằng cách sử dụng tài liệu tham khảo yếu. Nhưng khi bạn muốn giữ các bộ điều khiển xung quanh bởi vì bạn chỉ cần thêm quan điểm của họ như subview để xem VC hiện tại của bạn sau đó bạn cần phải sử dụng con trỏ mạnh ot khác họ sẽ được sớm deallocated. –

+0

okay cảm ơn bạn rất nhiều – MJB

Trả lời

9

Con trỏ mạnh chỉ liên kết với rootViewController của bạn. Điều này không có nghĩa là nó sẽ tự động trỏ mạnh đến các khung nhìn khác của bạnController bên trong rootViewController của bạn.

Bạn nên đặt các thuộc tính đó thành mạnh, để đảm bảo rằng các chế độ xem khác của bạnBộ điều khiển sẽ không bị phân phối theo bất kỳ cách nào bạn không muốn chúng.

Nếu bạn đẩy chúng vào ngăn điều hướng, điều này sẽ ổn, vì ngăn xếp điều hướng tự động tăng điểm cho chúng. Nhưng nếu bạn chỉ muốn thêm các khung nhìn của họ dưới dạng các bản xem con trong rootViewController của bạn, thì bạn muốn đảm bảo rằng các thuộc tính đó là mạnh.

Đối tượng bị phân phối khi không có con trỏ mạnh. Và như không có con trỏ mạnh mẽ để xem khác của bạnControllers họ sẽ nhận được deallocated.

+0

Tôi nghĩ rằng nó có nghĩa là miễn là không có điểm đối tượng mạnh mẽ chỉ cho họ. do đó, rootviewC là mạnh mẽ của tôi appdelegate, nó sẽ không nhận được deallocated, và miễn là anh ta trỏ đến những người khác ok của nó. nhưng tôi rõ ràng hiểu lầm rằng – MJB

2

Strong là tương đương với tỷ lệ giữ lại ngoại trừ ARC sẽ quản lý việc phát hành cho bạn. Yếu là tránh các chu kỳ lưu giữ - nơi cha mẹ giữ lại trẻ và ngược lại.

__weak chỉ định tham chiếu không giữ đối tượng được tham chiếu còn hoạt động. Một tham chiếu yếu được thiết lập là không khi không có tham chiếu mạnh đến đối tượng.

Dưới đây là một liên kết: Weak and strong property setter attributes in Objective-C

Cho rằng bạn muốn giữ lại các bộ điều khiển xem xung quanh, lựa chọn tốt nhất là một tài liệu tham khảo mạnh mẽ!Hãy chắc chắn rằng chúng không được phát hành trước khi bạn cần chúng!

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