2013-05-09 26 views
13

Trong Obj-C, các thuộc tính có thể được cấu hình yếu/mạnh. Các biến cá thể. như sau -iVars tham chiếu mạnh mẽ, yếu hoặc gì?

@interface MyClass { 
NSObject *a; 
} 

Đối tượng MyClass có yếu liên quan đến a hoặc mạnh hoặc khác? Tôi nghĩ rằng iVar không được phát hành cho đến khi đối tượng của nó được phát hành. Tại sao chúng ta không chỉ định yếu/mạnh đối với các thuộc tính iVar?

Trả lời

13

tham chiếu mặc định để Ivar là __strong, mặc dù bạn một cách rõ ràng có thể đặt nó vào được __weak hoặc __strong


+0

Có cách nào để khai báo Ivar như sao chép hoặc chuyển nhượng? – JoJo

1
@interface MyClass { 
__weak NSObject *a; 
__strong NSObject *a; 
__unsafe_unretained NSObject *obj; 
} 
10

Bạn câu hỏi truyền cảm hứng cho tôi và tôi đã làm một tìm kiếm sâu vào mục tiêu c là quản lý bộ nhớ. Tôi muốn chia sẻ điều gì đó với bạn rằng tôi nhận được từ tài liệu của apple.

Mặc định hành vi của dụ biến

biến Instance duy trì một tham chiếu mạnh mẽ cho các đối tượng theo mặc định

Sao chúng ta không xác định yếu/mạnh mẽ cho Ivar như tính?

Biến mẫu cục bộ và biến thể không thuộc tính duy trì tham chiếu mạnh mẽ đến đối tượng theo mặc định. Không cần phải chỉ định thuộc tính mạnh một cách rõ ràng, bởi vì nó là mặc định.
Một biến duy trì một tham chiếu mạnh mẽ đến một đối tượng chỉ miễn là biến đó nằm trong phạm vi, hoặc cho đến khi nó được gán lại cho một đối tượng khác hoặc không.

Nếu bạn không muốn có một biến để duy trì một tham chiếu mạnh mẽ, bạn có thể khai báo nó như __weak, như thế này:

NSObject * __weak weakVariable; 
Các vấn đề liên quan