[Tip] Swift -> Protocol Conditional Extension

protocol MyProtocol {

}

extension MyProtocol where Self: ImmutableMappable {
static func createObject() -> [Self]  {
var items = [Self]()
var json: [String: Any] = [“greeting”: “hello world”]
let item = self.init(JSON: json)
items.append(item)

return items
}

}

 

https://stackoverflow.com/questions/35133887/how-to-require-that-a-protocol-can-only-be-adopted-by-a-specific-class

[ios] Object Allocation, init

Allocation

alloc 메서드가 호출 될 때 중요한 필드 2개가 초기화 된다. isaretain count다.

그러나 alloc만 호출 되어서는 객체를 바로 사용할 수 없고 init 메서드가 호출 되어야 한다.

init 메서드는 각 객체의 초기화 작업과 functional object를 반환 한다고 한다.

https://developer.apple.com/library/ios/documentation/General/Conceptual/CocoaEncyclopedia/ObjectAllocation/ObjectAllocation.html#//apple_ref/doc/uid/TP40010810-CH7-SW1

Init

self = [super init];

why????

일반적인 경우 리턴값 필요 없음.

그러나 이게 FileReader를 init 한다던가 단 하나만 존재하는 객체를 init 한다면…

상황에 따라서 nil이나 이전에 생성한 객체를 반환해야 한다.

그런 클래스를 상속 받았다면 “self = [super int];” 이 의미를 가지게 된다.

결론 : 알고 쓰자 ㅋ

https://developer.apple.com/library/ios/documentation/General/Conceptual/CocoaEncyclopedia/Initialization/Initialization.html

용어 설명

isa  : “is a”

http://stackoverflow.com/questions/3405224/what-does-isa-mean-in-objective-c

Objective C는 선천적으로 C Struct 기반으로 만들어 졌다.

each Struct 들이 class 를 가리키는 pointer field를 가지고 있는데 그것이 isa다.