[Swift Tips 독서노트] Objective-C에서 Swift까지(3)
UnsafePointer - 포인터 전용 변환
swift 사상에서 모든 인용이나 변수의 유형은 그들의 실제 유형에 정확하고 정확하게 대응한다.임의의 유형 전환을 할 수 없거나 지침을 통해 엉뚱한 짓을 할 수 없다.
UnsafePointer와 그것의 일련의 변체는 C 언어 지침에 대한 접근과 전환 방법이다.C 언어에서 메모리 주소를 매개 변수로 받아들이면 Swift에서 메모리 주소를 UnsafePointer 유형으로 변경합니다.C 언어
Swift 언어
const Type *
UnsafePointer
Type *
UnsafeMutablePointer
C에서 주소의 값을 취하는 데 사용
*하고 Swift는 memory 값을 취할 수 있다.방법 전참이 바늘 주소일 때 Swift와 C는 모두 변수 이름 앞에
&를 붙인다사용
unsafeBitCast 강제 변환 // unsafeBitCast , 。 `unsafe` 。
let str = unsafeBitCast(CFArrayGetValueAtIndex(arr, 0), to: CFString.self)
--
C 포인터 메모리 관리
swift에서 C 포인터를 자동으로 메모리 관리할 수 없습니다.수동으로 메모리 관리를 해야 하며, 관리 원칙은 누가 신청하고 누가 석방하는가이다.
포인터 사용
allocate과 initialize를 만들고 마지막으로 deinitialize와 deallocate를 사용하여 포인터가 가리키는 메모리의 대상과 포인터 자체를 방출합니다.지침의 메모리 신청도
malloc 또는 calloc로 사용할 수 있으며, 이때 방출free-- CopaquePointer 및 C convention
C에는 헤더 파일에서 정의를 찾을 수 없고 세부 사항도 숨겨져 있다.불투명 포인터(Opaque Pointer)라고 합니다.
swift에서 이 불투명 바늘에 대응하는 유형은
COpaquePointerC에서 유형을 정할 수 있는 지침은 swfit에서 사용UnsafePointer하여 대응한다.C의 함수 바늘은 swift에서 클립으로 변환할 수 있지만
@convention 표시를 붙여야 합니다--
GCD 및 지연 시간 조정
GCD의
asyncAfter를 사용하여 시간 지연 기능을 실현할 수 있다. let interval : TimeInterval = 2.0
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + interval) {
print(" UI")
}
--
객체 유형 가져오기
// type(of:)
let new = "hhhhhhh"
let type0 = type(of: new)
let p = People()
let type1 = type(of: p)
print("type0 is \(type0), type1 is \(type1)" )
--
스스로 반성하다
대상에게 자성이라는 유형이 있는지 확인하기 위해 질문을 보냅니다.
//OC:
[obj1 isKindOfClass:[ClassA class]];
[obj2 isMemberOfClass:[ClassB class]];
//Swift ,NSObject .
let u = User.sharedUser
let b0 = u.isKind(of: User.self) //true
let b1 = u.isMember(of: People.self) //false
// NSObject
class People { }
let p1 : AnyObject = People()
let b2 = p1.isKind(of: People.self) //true
let b3 = p1.isKind(of: User.self) //false
// NSObject , `is`
let p2 : AnyObject = People()
if (p2 is User) {
print("p2 User")
} else if (p2 is People) {
print("p2 People") //
}
// , `is` 。
let p3 = People()
if (p3 is People) { //⚠️ : "is" test always true
print("p3 people")
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.