"Lười biếng" được sử dụng trong hai ngữ cảnh khác nhau.
Đầu tiên, khi phê bình một thiết kế lớp, lập luận rằng một lớp là không hiệu quả - rằng nó không đủ để biện minh cho sự tồn tại của nó. Mọi người cũng gọi loại này là "mỏng". Đây có thể không phải là ý của bạn ở đây.
Thứ hai, lười biếng đánh giá và instantiation lười biếng có nghĩa là lớp chỉ thực hiện công việc đánh giá một tài sản hoặc khởi tạo riêng của mình khi thực sự cần thiết.
Ví dụ: giả sử chúng tôi có một lớp tạo đối tượng nhân viên.
@implementation Employee
- (id) initWithID: (IdentificationCode*) ident
{
self =[super init]
if (self) {
_records=[self retrieveEmployeeRecordsFor: ident];
_identification=ident;
}
return self;
}
Điều này là tốt, nhưng truy xuất tất cả các bản ghi từ cơ sở dữ liệu có thể chậm. Và đôi khi chúng ta không cần phải làm công việc. Ví dụ:
- (BOOL) isFounder
{
if (indent.number<10) return YES;
return NO;
}
Nếu chúng tôi khởi tạo Nhân viên chỉ đơn giản là tìm hiểu xem họ là Người sáng lập, chúng tôi không cần tra cứu hồ sơ của họ!
.....
if ([thisEmployee isFounder]) {
[self sendCandyTo: thisEmployee.identification];
}
Mặt khác, đôi khi chúng ta cần đến chúng:
- (NSArray*) payments
{
return [self.records retrievePayStubs];
}
Vì vậy, nếu chúng ta đang xây dựng một nhân viên chỉ để gọi isFounder
, chúng ta lãng phí một tra cứu cơ sở dữ liệu. Nhưng chúng ta không thể bỏ qua điều đó, bởi vì payments
cần nó.
Những gì chúng tôi làm là lấy tra cứu cơ sở dữ liệu ra khỏi hàm tạo và đặt nó theo phương thức load
.
- (void) load
{
if (records) return;
self.records=[self retrieveEmployeeRecordsFor: ident];
}
- (NSArray*) payments
{
[self load];
return [self.records retrievePayStubs];
}
Bây giờ, chúng tôi chỉ tải hồ sơ nhân viên khi chúng tôi thực sự cần chúng. Nếu chúng đã được tải, chúng tôi không thực hiện thêm bất kỳ công việc nào (ngoài một cuộc gọi phương thức). Nếu chúng ta không bao giờ cần các hồ sơ thanh toán, thì chúng ta không cần phải làm công việc gì cả.
Lớp học chỉ hoạt động khi cần - và đợi đến phút cuối cùng để thực hiện công việc. Đó là "lười biếng!"
có thể là một lớp được tải từ plugin. có thể kiểm tra tài liệu về plugin/dyld/mã được nạp động – nielsbot
Bạn có chắc chắn điều đó có nghĩa là lớp học lười biếng và không chỉ là danh sách? –
Tôi đồng ý với @JoshCaswell, cho rằng sau này trong nguồn thời gian chạy có tham chiếu đến việc tải nhẹ nhàng trong các lớp học. Nó gần như chắc chắn đề cập đến danh sách, chứ không phải là một lớp học là 'lười biếng'. – lxt