Tôi ghét các khối. Chúng có nghĩa là để làm cho mã ngắn gọn hơn, nhưng tôi không thể tìm thấy bất cứ điều gì xấu xí hơn. Ví dụ, với AFNetworking:Có cách nào để truyền các phương thức như các khối không?
AFJSONRequestOperation* operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request
requestsuccess:^(NSURLRequest *request, NSURLResponse *response, id JSON) {
// Some
// very
// long
// (and as ugly as blocks)
// processing
}
failure:^(NSURLRequest *request, NSURLResponse *response, NSError *error, id JSON)) {
// Failure code
}]
Something như thế này sẽ tốt hơn nhiều:
AFJSONRequestOperation* operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request
requestsuccess:@selector(requestSuccess:response:json:)
failure:@selector(requestSuccess:response:error:)]
Vì vậy, là nó có thể sử dụng bộ chọn phương pháp như khối? Nếu không, làm thế nào tôi có thể làm cho mã khối tốt hơn?
Nó làm phiền tôi, vì các khối này có vẻ là tương lai của lập trình khách quan-c và chúng chỉ KHÔNG đọc được.
Các khối lúc đầu có vẻ 'xấu' nhưng chúng mạnh mẽ và có những lý do cụ thể mà chúng 'có vẻ là tương lai'. Tôi sẽ khuyên bạn nên bài viết này để có một cái nhìn sâu sắc tốt: http://ios-blog.co.uk/articles/tutorials/programming-with-blocks-an-overview/ – Alladinian
Các khối không làm cho mã ngắn gọn hơn, chúng làm cho mã mạnh hơn. – dreamlax
Đó là một câu hỏi hợp lệ, tôi nghĩ vậy. Vì cả hai khối có thể nhận các tham số (0..n) và trả về một tham số hoặc khoảng trống, các phương thức có thể được sử dụng như các khối ... hoặc đặt nó theo một cách khác, sẽ tốt hơn nếu xác định các khối ở cấp lớp. Tôi không nghĩ rằng bạn có thể ... –