2011-10-20 32 views
56

Đó là sự hiểu biết của tôi rằng việc đặt một ivar bây giờ vẫn giữ được đối tượng được gán cho nó, vì thiết lập các biến mặc định là vòng loại strong. Vì ivars nằm trong phạm vi của đối tượng mà chúng được khai báo và strong giữ lại các đối tượng trong phạm vi của biến, điều này có nghĩa là giá trị ivars sẽ không bao giờ được giải phóng trong khi đối tượng chứa ivar vẫn còn sống.Thuộc tính so với ivar trong thời gian ARC

Điều này có đúng không?

Nếu vậy, tôi có nghĩ rằng có, về quản lý bộ nhớ, không có sự khác biệt giữa tài sản giữ lại (mạnh) và một thanh đơn giản nữa không?

+1

Câu hỏi hay, đã tự hỏi bản thân mình tại một thời điểm nào đó. –

Trả lời

67

Nếu một biến:

  1. được khai báo trong một lớp học sử dụng ARC.
  2. Chỉ được sử dụng để thực hiện lớp học (không được hiển thị như là một phần của giao diện lớp học).
  3. Không yêu cầu bất kỳ KVO.
  4. Không yêu cầu bất kỳ công cụ tùy chỉnh/thiết lập nào.

Sau đó, bạn nên khai báo nó dưới dạng ivar mà không cần tương ứng @property/@synthesize và để tham chiếu trực tiếp trong quá trình triển khai. Nó là nội tuyến với Encapsulation để khai báo ivar này trong tệp triển khai lớp.

// MyClass.h 
@interface MyClass : ParentClass 
@end 

// MyClass.m 
@implementation MyClass { 
    NSString *myString; 
} 

- (void)myMethod { 
    myString = @"I'm setting my ivar directly"; 
} 
@end 
  • Ivar này sẽ được coi như __strong bởi trình biên dịch ARC.
  • Nó sẽ được khởi tạo thành nil nếu đó là một đối tượng hoặc 0 nếu nó là nguyên thủy.
+0

Không thể chắc chắn về 2 mục. U có thể truy cập ivar công khai sử dụng classInstance-> iVar = @ "Giá trị mới" –

+2

@DenisMikhaylov Điểm tốt. Mặc dù tôi nghĩ rằng tôi sẽ để lại trong "điểm 2" bởi vì tôi đang nói về thực hành tốt nhất, và nó có thể là không tốt thực hành để truy cập trực tiếp của một lớp học. – bearMountain

+0

câu trả lời ngắn gọn, cảm ơn. –

6

Bạn không thể sử dụng KVO và thực hiện tùy chỉnh getter và setters với các biến mẫu khác hơn là chúng rất giống nhau khi sử dụng ARC.

Các vấn đề liên quan