Về cơ bản, bạn có thể tạo, thêm và xóa trình nhận dạng cử chỉ khi có ý nghĩa. Và "khi nó có ý nghĩa" thay đổi tùy thuộc vào một vài điều, nhưng thường chỉ là về việc bạn sẽ giữ chúng như là ngà voi. Với ARC
khóa đang quản lý các tham chiếu mạnh mẽ; Với ARC
ivars mạnh theo mặc định.
Vì vậy, giả sử bạn thêm trình nhận dạng nhấn. Trong trường hợp này, bạn không cần truy cập lại trình nhận dạng. Tôi sẽ tạo nó như sau:
-(void)viewDidLoad{
[super viewDidLoad];
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
[self.view addGestureRecognizer:tap];
}
Với trường hợp này, bạn không cần phải làm gì khác để quản lý trình nhận dạng này. Hệ thống xem đang giữ tham chiếu mạnh mẽ với nó. Tất cả những gì bạn làm là ngồi lại và đợi nó gọi handleTap:
. Khi chế độ xem dỡ bộ nhận dạng nhấn này sẽ được deallocated.
Kịch bản này cũng sẽ không tốt nếu bạn thêm trình nhận dạng này vào viewWillAppear:
vì không khó tưởng tượng một loạt sự kiện dẫn đến nhiều người nhận dạng được tạo.
Vì vậy, một cách hợp lý nếu bạn muốn thêm trình nhận dạng trong các phương thức hiển thị, bạn sẽ phải giữ một số loại tham chiếu đến chúng trong thanh công cụ. Nhưng một lần nữa đó không phải lúc nào cũng là một ý tưởng tồi. Nói chung, lý do bạn muốn tham chiếu đến trình nhận dạng của mình là trợ giúp trong logic của các phương thức <UIGestureRecognizerDelegate>
, nếu chúng được sử dụng.
Cá nhân tôi sẽ không bao giờ thêm trình nhận dạng theo phương thức initWith..
cho tệp đính kèm sau này. Ưu điểm duy nhất là bất kỳ trình nhận dạng nào bạn tạo ở đó sẽ được lưu giữ xung quanh toàn bộ vòng đời của trình điều khiển chế độ xem. Nhưng kể từ khi một recognizer là khá rõ ràng một phần của hệ thống xem loại muddies-up MVC
rằng Cocoa là lớn trên. Ngoài ra trong chế độ xem tình trạng bộ nhớ thấp của bộ điều khiển trên ngăn điều hướng bị xóa, nhưng trong trường hợp này trình nhận dạng có thể vẫn sử dụng bộ nhớ (không phải là có các đối tượng lớn) không có lý do thực sự.
Bạn chắc chắn có thể thêm trình nhận dạng theo phương thức view(Will/Did)Appear:
và xóa nó trong view(Will/Did)Disappear:
. Không phải sở thích của tôi.Tôi không nghĩ rằng chỉ vì chế độ xem modal
được trình bày và xóa hoặc điều hướng push
/pop
đã xảy ra mà tôi nên xóa và thêm lại trình nhận dạng của mình.
Tôi khuyên bạn nên luôn sử dụng viewDidLoad
để khởi tạo và đính kèm trình nhận dạng của bạn. Chỉ cần nhớ không đưa ra bất kỳ tham chiếu nào mạnh mẽ cho chúng trong viewDidUnload
để giúp trong tình huống bộ nhớ thấp. Và một lần nữa với ARC
không cần phải làm bất cứ điều gì với ivars trong dealloc.
Tôi đã lướt qua điều đó nhưng không tìm thấy câu trả lời cho câu hỏi của mình. – mrd3650
@TheLion: "Rất tiếc, không thể tìm thấy trang đó". – Colas
Xin lỗi, táo đã thay đổi nó ở đây [https://developer.apple.com/library/ios/documentation/EventHandling/Conceptual/EventHandlingiPhoneOS/GestureRecognizer_basics/GestureRecognizer_basics.html) đó là URL mới cho cùng một tài nguyên. Cảm ơn bạn đã chỉ ra @Colas –