[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에서 이 불투명 바늘에 대응하는 유형은
COpaquePointer
C에서 유형을 정할 수 있는 지침은 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에 따라 라이센스가 부여됩니다.