2011-10-03 23 views
11

Tôi đang cố gắng tìm ra nếu tôi nên cache [UIFont fontWithName: @ "myfont" size: 24]. Tôi đang sử dụng lại phông chữ này ở nhiều nơi. Tôi tự hỏi nếu iOS đã được bộ nhớ đệm này cho tôi bởi vì bộ nhớ đệm font là rất phổ biến ở cấp độ hệ điều hành.iOS UIFont caching?

Ai đó có thể nhận xét về điều này?

Cảm ơn.

Trả lời

18

Lần cuối cùng tôi kiểm tra, phông chữ hệ thống đã được lưu vào bộ nhớ cache (ví dụ: gọi [UIFont systemFontOfSize:foo] hai lần trả lại cho bạn cùng một đối tượng). Tôi không chắc chắn mức độ thường xuyên của bộ nhớ cache tuôn ra, nhưng nó sẽ có vẻ rất ngớ ngẩn để không bộ nhớ cache phông chữ, kể từ khi họ đang instantiated tất cả thời gian trong nib tải. Tất nhiên, nếu bạn đang làm nó hai lần trong cùng một chức năng, nó nhanh hơn một chút để cache nó trong một biến cục bộ (và nó làm giảm kích thước mã, kể từ khi các cuộc gọi phương thức Obj-C là rất lớn!). Nếu bạn đang làm điều đó rải rác ở những nơi khác nhau, nó có thể không có giá trị nỗ lực.

Điều đó nói rằng, bạn có thể muốn truy cập phông chữ thông qua phương pháp lớp hoặc phương pháp trên "singleton" (ví dụ: [MyAppBranding titleFont] hoặc [[MyAppBranding currentBranding] titleFont]). Điều này có nghĩa là bạn có thể thay đổi phông chữ được sử dụng dễ dàng hơn, cho phép bạn thêm một lớp bộ nhớ đệm bổ sung nếu bạn nhận thấy đó là nút cổ chai hiệu suất và làm cho nó nhiều hơn dễ dàng hơn để hỗ trợ nhiều thương hiệu.

18

Tôi tự hỏi liệu iOS đã lưu bộ nhớ đệm này cho tôi vì bộ nhớ đệm phông chữ rất phổ biến ở cấp hệ điều hành.

đó là những gì iOS (Tôi chỉ thử nghiệm trên iOS 6.1).

Tôi chỉ muốn triển khai bộ nhớ đệm của riêng mình. Bạn biết vì tôi là một người thông minh và tải phông chữ có lẽ không phải là rất nhanh.

Hóa ra mọi người tại Apple cũng thông minh. Các đối tượng được trả về bởi fontWithName:size: giống nhau đối với các phông chữ bằng nhau và kích thước bằng nhau. Có một cơ chế bộ nhớ đệm tại chỗ.

Để xác nhận điều này, tôi đặt một vài NSLog trong suốt ứng dụng.

NSLog(@"GillSans 12 %p", [UIFont fontWithName:@"GillSans" size:12.0f]); 

Tất cả đều hiển thị cùng một địa chỉ bộ nhớ.

Hoạt động với phông chữ tùy chỉnh của bạn.