Objective-C의 취약하고 강력한 속성 설정자 속성
목표-C에서 약한 속성과 강한 속성 설정자 속성의 차이점은 무엇입니까?
@property(retain, [weak/strong]) __attribute__((NSObject)) CFDictionaryRef myDictionary;
어떤 영향과 이점이 있습니까?
iOS 4에서는 약한 것을 사용할 수 없고 assign을 사용해야 한다고 들었습니다.
약한 것이 과제와 비슷한가요?
변수 속성에 대해 알고 있는 내용은 다음과 같습니다.
- 원자 //기본값
- 원자가 아닌
- strong=filename //기본값
- 약한
- 유지하다
- //기본값 할당
- 안전하지 않은
- 알았다.
- 읽기 전용
- 읽기 쓰기 //기본값
따라서 아래는 위에서 언급한 모든 속성을 찾을 수 있는 자세한 기사 링크입니다. 이 링크는 분명히 도움이 될 것입니다.여기서 최고의 답변을 해주신 모든 분들께 감사드립니다!!
01.strong (iOS4 = retain ) - "내가 더 이상 가리키지 않을 때까지 이것을 힙에 보관"이라고 표시됩니다. 즉, "나는 소유자입니다. 당신은 유지와 동일한 목표를 갖기 전에 이것의 할당을 해제할 수 없습니다." - 당신은 객체를 유지해야 할 경우에만 강함을 사용합니다. - 기본적으로 모든 인스턴스 변수와 로컬 변수는 강함 포인터입니다. - 일반적으로 st를 사용합니다.UIViewControllers(UI 항목의 상위 항목)에 대한 rong - strong은 ARC와 함께 사용되며 기본적으로 개체의 보유 개수에 대해 걱정할 필요가 없습니다.ARC는 작업이 끝나면 자동으로 해제합니다.키워드 strong을 사용하면 개체를 소유하게 됩니다.
예:
@property (strong, nonatomic) ViewController *viewController;
@synthesize viewController;
02.weak(iOS4 = safeature_untained) - "다른 사람이 강하게 가리킬 때까지 이것을 유지하라"고 표시됩니다. - 할당, 유지 또는 해제와 동일한 것입니다. - "취약" 참조는 사용자가 보유하지 않는 참조입니다. - 우리는 일반적으로 IOutlet(UIviewController's Child)에 약한 것을 사용합니다.하위 개체는 상위 개체만큼만 존재하면 되기 때문에 작동합니다. - 약한 참조는 참조된 개체가 가비지 수집기에 의해 수집되지 않도록 보호하지 않는 참조입니다. - 약한 속성은 기본적으로 할당되지 않은 속성입니다.개체의 할당이 취소되면 약한 포인터가 자동으로 0으로 설정됩니다.
예:
@property (weak, nonatomic) IBOutlet UIButton *myButton;
@synthesize myButton;
설명:BJ 호머 덕분에
우리의 대상이 개라고 상상해 보세요. 그리고 그 개가 도망치고 싶어한다고 생각해 보세요).강한 포인터는 개의 목줄과 같습니다.개에게 목줄이 붙어 있는 한, 개는 도망가지 않을 것입니다.만약 다섯 명이 한 마리의 개에게 그들의 목줄을 붙이면, 그 개는 다섯 개의 목줄이 모두 분리될 때까지 달아나지 않을 것입니다.반면에 약한 포인터는 어린 아이들이 개를 가리키며 "이것 봐!"라고 말하는 것과 같습니다.개!"개가 아직 목줄에 묶여 있는 한, 어린 아이들은 여전히 개를 볼 수 있고, 그들은 여전히 그것을 가리킬 것입니다.하지만, 모든 끈이 분리되자마자, 그 개는 아무리 많은 어린 아이들이 그것을 가리켜도 달아납니다.마지막 강한 포인터(레쉬)가 더 이상 개체를 가리키지 않는 즉시 개체의 할당이 취소되고 모든 약한 포인터가 0으로 표시됩니다.약한 거 쓸 때?약한 사용을 원하는 유일한 경우는 유지 주기를 방지하려는 경우입니다(예: 부모는 자녀를 유지하고 자녀는 부모를 유지하므로 둘 다 해제되지 않음).
특정 파일에 대해 ARC를 켜거나 끌 수 있습니다.켜져 있으면 사용할 수 없습니다.retain release autorelease에 등을 사용합니다... 대신에 당신은 사용합니다.strong weak 또는 동산또는부에 대해__strong __weak ~ (으)로 표시)__strongStrong은 유지하는 것과 동등하지만 ARC가 릴리스를 관리합니다.
약한 사용을 원하는 유일한 경우는 유지 주기를 방지하려는 경우입니다(예: 부모는 자녀를 유지하고 자녀는 부모를 유지하므로 둘 다 해제되지 않음).
브리지 브리지 요금'에서 )NSCF좀는 조금 까다롭습니다.해야 합니다.CFRelease()그리고.CFRetain()CF 객체의 경우.당신이 그것들을 다시 NS 객체로 변환할 때 당신은 컴파일러에게 당신이 무엇을 했는지 알 수 있도록 보유 개수에 대해 말해야 합니다.
여기 다 있습니다.
로버트가 언급한 문서 중 마지막 두 가지 질문에 명시적으로 답변하는 부분을 호출하려면:
// The following declaration is similar to "@property(assign) MyClass *myObject;"
// except that if the MyClass instance is deallocated,
// the property value is set to nil instead of remaining as a dangling pointer.
@property(weak) MyClass *myObject;
이를 제로잉 약한 기준이라고 합니다.__unsafe_unretained_를 사용하여 약한 참조를 영점화하지 않는 약한 참조를 만들 수 있지만 이름에서 알 수 있듯이 일반적으로 이는 권장되지 않습니다.
문서에도 있습니다.
Weak references are not supported in Mac OS X v10.6 and iOS 4.
WAK 속성의 결정적인 명확한 사용은 다음과 같습니다.
Any control whose properties we need to change(eg:text of a label) is declared weak and as below:
@property(nonatomic,weak) IBOutlet Type *name;
Eg: @property(nonatomic,weak) IBOutlet UILabel *myLabel;
더 자세히 설명하기 위해 예를 들어보겠습니다(위 답변은 이미 훌륭합니다). 이 예가 조금 더 도움이 되기를 바랍니다.
A반과 B반 두개로 하겠습니다.
//A.h
#import <Foundation/Foundation.h>
#import "B.h"
@interface A : NSObject
@property (nonatomic, strong) B *objB;
@end
@implementation A
//
@end
//B.h
#import <Foundation/Foundation.h>
#import "A.h"
@interface B : NSObject
@property strong text(nonatomic, strong) A *objA;
@end
@implementation B
//
@end
and in main
#import "B.h"
#import "A.h"
{
A *obja =[[A alloc]init];
B *objb =[[B alloc]init];
A.objB=objb;
B.objA=obja;
}
위의 코드는 둘 다 강력한 유형 a------>b-------->a이기 때문에 유지 주기를 생성합니다.
따라서 이 문제를 방지하려면 그 중 하나의 week 속성을 사용하여 참조 카운트를 늘리지 않고 매주 개체를 참조해야 합니다.
언급URL : https://stackoverflow.com/questions/7912555/weak-and-strong-property-setter-attributes-in-objective-c
'programing' 카테고리의 다른 글
| bower 명령을 찾을 수 없음 (0) | 2023.08.05 |
|---|---|
| 정렬되지 않은 목록을 두 개의 열에 표시하는 방법은 무엇입니까? (0) | 2023.08.05 |
| 이 jQuery click 기능이 작동하지 않는 이유는 무엇입니까? (0) | 2023.08.05 |
| 중간에 단어가 있는 수평선에 대한 CSS 기법 (0) | 2023.08.05 |
| iPhone/iPad/iPod touch 색상 감지? (0) | 2023.08.05 |