Nó không phải là lạ khi nhìn thấy lời khuyên phát triển iOS dọc theo dòng: các khối đặt tên trong mục tiêu-c?
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// work in background
NSLog(@"%s work", __PRETTY_FUNCTION__);
dispatch_async(dispatch_get_main_queue(), ^{
// update UI on main queue
NSLog(@"%s updateUI", __PRETTY_FUNCTION__);
});
});
này là rất tốt, nhưng nó có thể được khó khăn để gỡ rối khi họ gặp khó khăn. Nhìn vào kết quả đầu ra:
AppName[1051:4013] __47-[Classname methodName]_block_invoke_0 work
AppName[1051:907] __block_global_0 updateUI
Dòng log đầu tiên có tên lớp và phương thức để chúng tôi hy vọng theo dõi vấn đề ở khối ngoài (hy vọng chúng tôi chưa xác định nhiều khối trong phương pháp đó), nhưng dòng đăng nhập thứ hai (từ khối bên trong)? Chúc may mắn, đặc biệt nếu bạn đã sử dụng mẫu này rất nhiều trong ứng dụng của mình.
Có cách nào để đặt tên cho các khối sẽ giúp chúng tôi xác định vị trí nguồn của chúng trong đầu ra bàn điều khiển và nhật ký sự cố không?
Ngoài ra, bạn có thể đặt điểm ngắt trong khối và trình gỡ lỗi sẽ phun vào bạn một dấu vết ngăn xếp khi nó đạt đến (IME hữu ích hơn 'NSLog' trong hầu hết các trường hợp). –
Tôi cũng sử dụng điểm ngắt và không bao giờ cảm thấy bất lợi bởi các khối. – danh
Tôi không nghĩ rằng có được xây dựng trong đặt tên của khối, nhưng bạn chắc chắn có thể tên hàng đợi, mà được bạn một phần của con đường. Điều đó xuất hiện trong trình gỡ lỗi và bạn có thể bao gồm điều đó trong câu lệnh NSLog. Ngoài ra, bạn cũng có thể sử dụng '__FILE__' và' __LINE__'. Có lẽ xác định macro của riêng bạn mà là một sự kết hợp của các bên trên. – Rob