Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Swift - Core Foudation

nakajijapan
December 17, 2014

Swift - Core Foudation

#potatotips12

nakajijapan

December 17, 2014
Tweet

More Decks by nakajijapan

Other Decks in Technology

Transcript

  1. QPUBUPUJQT
    !OBLBKJKBQBO
    4XJGU
    $PSF
    'PVOEBUJPO

    View Slide

  2. !OBLBKJKBQBO
    4PGUXBSF&OHJOFFS
    (.01&1"#0JOD
    J048FC049

    View Slide

  3. View Slide

  4. J04"OESPJE
    ϋϯυϝΠυɺख࡞Γ࡞඼ͷ௨ൢɾൢചαΠτ
    NJOOF

    View Slide

  5. $PSF'PVOEBUJPO

    View Slide

  6. /,+.PWJF$PNQPTFS
    /,+.VMUJ.PWJF$BQUVSF7JFX
    IUUQTHJUIVCDPNOBLBKJKBQBO/,+.VMUJ.PWJF$BQUVSF7JFX
    IUUQTHJUIVCDPNOBLBKJKBQBO/,+.PWJF$PNQPTFS

    View Slide

  7. $.4BNQMF#VGGFS
    ؔ࿈ͷ࣮૷Λ4XJGUʹҠ
    ߦͨ͠ͱ͖ͷ࿩Λ͠·͢

    View Slide

  8. $.4BNQMF#VGGFS
    ɾ$PSF.FEJBGSBNFXPSL
    ɾ$PSF'PVOEBUJPOPCKFDUT
    ɾԿ͔͠ΒͷϝσΟΞσʔλ͕αϯϓϦϯά͞Ε͍ͯΔ
    ɹɹɾಈը৘ใͷҰ෦෼
    ɹɹɾը૾৘ใ

    View Slide

  9. $.4BNQMF#VGGFS
    $7*NBHF#V⒎FS3FGJNBHF#V⒎FS
    $.4BNQMF#V⒎FS(FU*NBHF#V⒎FS TBNQMF#V⒎FS

    View Slide

  10. $.4BNQMF#VGGFS
    $7*NBHF#V⒎FS3FGJNBHF#V⒎FS
    $.4BNQMF#V⒎FS(FU*NBHF#V⒎FS TBNQMF#V⒎FS


    Χϝϥ͔Βը૾৘ใΛऔΓग़͢ࡍͷॲཧ

    View Slide

  11. $.4BNQMF#VGGFS
    $7*NBHF#V⒎FS3FGJNBHF#V⒎FS
    $.4BNQMF#V⒎FS(FU*NBHF#V⒎FS TBNQMF#V⒎FS

    WBSJNBHF#V⒎FS$7*NBHF#V⒎FS3FG
    $.4BNQMF#V⒎FS(FU*NBHF#V⒎FS TBNQMF#V⒎FS

    ͍͍ͩͨ͜ΕͰ͍͖ͦ͏

    View Slide

  12. $.4BNQMF#VGGFS
    $7*NBHF#V⒎FS3FGJNBHF#V⒎FS
    $.4BNQMF#V⒎FS(FU*NBHF#V⒎FS TBNQMF#V⒎FS

    WBSJNBHF#V⒎FS$7*NBHF#V⒎FS3FG
    $.4BNQMF#V⒎FS(FU*NBHF#V⒎FS TBNQMF#V⒎FS

    6ONBOBHFE$7*NBHF#V⒎FSJTOPUDPOWFSUJCMFUP$71JYFM#V⒎FS3FG

    View Slide

  13. $.4BNQMF#VGGFSI
    Λௐ΂Δ

    View Slide

  14. /*!
    @typedef CMSampleBufferRef
    @abstract A reference to a CMSampleBuffer, a CF object
    containing zero or more compressed (or uncompressed)
    samples of a particular media type (audio, video, muxed,
    etc).
    */
    typedef struct opaqueCMSampleBuffer *CMSampleBufferRef;
    $.4BNQMF#V⒎FSI
    /*!
    @typedef CMSampleBufferRef
    @abstract A reference to a CMSampleBuffer, a CF object containing
    zero or more compressed (or uncompressed)
    samples of a particular media type (audio, video, muxed,
    etc).
    */
    typealias CMSampleBufferRef = CMSampleBuffer

    View Slide

  15. /*!
    @typedef CMSampleBufferRef
    @abstract A reference to a CMSampleBuffer, a CF object
    containing zero or more compressed (or uncompressed)
    samples of a particular media type (audio, video, muxed,
    etc).
    */
    typedef struct opaqueCMSampleBuffer *CMSampleBufferRef;
    $.4BNQMF#V⒎FSI
    /*!
    @typedef CMSampleBufferRef
    @abstract A reference to a CMSampleBuffer, a CF object containing
    zero or more compressed (or uncompressed)
    samples of a particular media type (audio, video, muxed,
    etc).
    */
    typealias CMSampleBufferRef = CMSampleBuffer

    View Slide

  16. 0QBRVF5ZQF

    View Slide

  17. 0QBRVF5ZQF
    w ෆಁ໌ͳσʔλܕ
    w ࢦ͍ࣔͯ͠͠ΔσʔλܕΛ֎෦͔ΒӅṭ͢Δ͜
    ͱ͕Ͱ͖ΔΧϓηϧԽ
    w ෆ༻ҙʹߏ଄ମͷϑΟʔϧυΛར༻͢Δ͜ͱΛ
    ආ͚Δ

    View Slide

  18. /*!
    @typedef CMSampleBufferRef
    @abstract A reference to a CMSampleBuffer, a CF object
    containing zero or more compressed (or uncompressed)
    samples of a particular media type (audio, video, muxed,
    etc).
    */
    typedef struct opaqueCMSampleBuffer *CMSampleBufferRef;
    $.4BNQMF#V⒎FSI
    /*!
    @typedef CMSampleBufferRef
    @abstract A reference to a CMSampleBuffer, a CF object containing
    zero or more compressed (or uncompressed)
    samples of a particular media type (audio, video, muxed,
    etc).
    */
    typealias CMSampleBufferRef = CMSampleBuffer
    PQBRVF$.4BNQMF#VGGFS
    ͕ͳ͍͡Όͳ͍͔

    View Slide

  19. /*!
    @typedef CMSampleBufferRef
    @abstract A reference to a CMSampleBuffer, a CF object
    containing zero or more compressed (or uncompressed)
    samples of a particular media type (audio, video, muxed,
    etc).
    */
    typedef struct opaqueCMSampleBuffer *CMSampleBufferRef;
    $.4BNQMF#V⒎FSI
    /*!
    @typedef CMSampleBufferRef
    @abstract A reference to a CMSampleBuffer, a CF object containing
    zero or more compressed (or uncompressed)
    samples of a particular media type (audio, video, muxed,
    etc).
    */
    typealias CMSampleBufferRef = CMSampleBuffer
    PQBRVF$.4BNQMF#VGGFS
    ͕ͳ͍͡Όͳ͍͔
    ͦΕ͕0QBRVF5ZQF

    View Slide

  20. 0QBRVF5ZQF
    w ߏ଄ମͷఆٛΛϔομʹެ։͠ͳ͍
    w ௚઀ૢ࡞͢ΔͷͰ͸ͳ͘ɺͦΕʹؔ͢Δඞཁͳ
    ૢ࡞͸͢΂ͯؔ਺Λ௨ͯ͠ߦ͏

    View Slide

  21. ؔ਺Λ௨ͯ͠ߦ͏
    $.4BNQMF#V⒎FS$SFBUF $.4BNQMF#V⒎FS$SFBUF$PQZ
    $.4BNQMF#V⒎FS$SFBUF$PQZ8JUI/FX5JNJOH $.4BNQMF#V⒎FS$SFBUF'PS*NBHF#V⒎FS
    $.4BNQMF#V⒎FS%BUB*T3FBEZ $.4BNQMF#V⒎FS(FU"VEJP#V⒎FS-JTU8JUI3FUBJOFE#MPDL#V⒎FS
    $.4BNQMF#V⒎FS(FU"VEJP4USFBN1BDLFU%FTDSJQUJPOT
    $.4BNQMF#V⒎FS(FU"VEJP4USFBN1BDLFU%FTDSJQUJPOT1US $.4BNQMF#V⒎FS(FU%BUB#V⒎FS
    $.4BNQMF#V⒎FS(FU%FDPEF5JNF4UBNQ $.4BNQMF#V⒎FS(FU%VSBUJPO
    $.4BNQMF#V⒎FS(FU'PSNBU%FTDSJQUJPO $.4BNQMF#V⒎FS(FU*NBHF#V⒎FS
    $.4BNQMF#V⒎FS(FU/VN4BNQMFT $.4BNQMF#V⒎FS(FU0VUQVU%FDPEF5JNF4UBNQ
    $.4BNQMF#V⒎FS(FU0VUQVU%VSBUJPO $.4BNQMF#V⒎FS(FU0VUQVU1SFTFOUBUJPO5JNF4UBNQ
    $.4BNQMF#V⒎FS(FU0VUQVU4BNQMF5JNJOH*OGP"SSBZ
    $.4BNQMF#V⒎FS(FU1SFTFOUBUJPO5JNF4UBNQ $.4BNQMF#V⒎FS(FU4BNQMF"UUBDINFOUT"SSBZ
    $.4BNQMF#V⒎FS(FU4BNQMF4J[F $.4BNQMF#V⒎FS(FU4BNQMF4J[F"SSBZ
    $.4BNQMF#V⒎FS(FU4BNQMF5JNJOH*OGP $.4BNQMF#V⒎FS(FU4BNQMF5JNJOH*OGP"SSBZ
    $.4BNQMF#V⒎FS(FU5PUBM4BNQMF4J[F $.4BNQMF#V⒎FS(FU5ZQF*% $.4BNQMF#V⒎FS*OWBMJEBUF
    $.4BNQMF#V⒎FS*T7BMJE $.4BNQMF#V⒎FS.BLF%BUB3FBEZ $.4BNQMF#V⒎FS4FU%BUB#V⒎FS
    $.4BNQMF#V⒎FS4FU%BUB#V⒎FS'SPN"VEJP#V⒎FS-JTU $.4BNQMF#V⒎FS4FU%BUB3FBEZ
    $.4BNQMF#V⒎FS4FU*OWBMJEBUF$BMMCBDL $.4BNQMF#V⒎FS4FU0VUQVU1SFTFOUBUJPO5JNF4UBNQ
    $.4BNQMF#V⒎FS5SBDL%BUB3FBEJOFTT

    View Slide

  22. /*!
    @typedef CMSampleBufferRef
    @abstract A reference to a CMSampleBuffer, a CF object
    containing zero or more compressed (or uncompressed)
    samples of a particular media type (audio, video, muxed,
    etc).
    */
    typedef struct opaqueCMSampleBuffer *CMSampleBufferRef;
    $.4BNQMF#V⒎FSI
    /*!
    @typedef CMSampleBufferRef
    @abstract A reference to a CMSampleBuffer, a CF object containing
    zero or more compressed (or uncompressed)
    samples of a particular media type (audio, video, muxed,
    etc).
    */
    typealias CMSampleBufferRef = CMSampleBuffer

    View Slide

  23. 3FNBQQFE5ZQFT
    w 4XJGU͸ࢀরܕ
    w ίϯύΠϥ͸3FGΛ࡟আ͢Δ

    View Slide

  24. func CMSampleBufferGetImageBuffer(sbuf: CMSampleBuffer!) ->
    Unmanaged!
    $.4BNQMF#V⒎FSI

    View Slide

  25. func CMSampleBufferGetImageBuffer(sbuf: CMSampleBuffer!) ->
    Unmanaged!
    $.4BNQMF#V⒎FSI
    Unmanaged!

    View Slide

  26. 6ONBOBHFE
    0CKFDUT

    View Slide

  27. 6ONBOBHFE0CKFDUT
    w ίϯύΠϥ͸ࣗಈతʹ$PSF'PVOEBUJPO0CKFDUT
    ΛϝϞϦ؅ཧ͢Δ͜ͱ͕Ͱ͖ͳ͍
    w 6ONBOBHFE5ߏ଄ମͰ$PSF'PVOEBUJPO
    0CKFDUTΛϥοϓ͠·͢
    w ඇ؅ཧͷΦϒδΣΫτΛड͚औΔͱ͖͸ɺϝϞ
    Ϧ؅ཧ͞ΕͨΦϒδΣΫτʹม׵͢΂͖

    View Slide

  28. 6ONBOBHFE0CKFDUT
    w ඇ؅ཧͷΦϒδΣΫτΛड͚औΔͱ͖͸ɺϝϞϦ؅ཧ͞
    ΕͨΦϒδΣΫτʹม׵͢΂͖
    w 6ONBOBHFE5͸ඇ؅ཧΦϒδΣΫτ
    w ϝϞϦ؅ཧ͞ΕͨΦϒδΣΫτʹ͢ΔͨΊʹ
    UBLF6OSFUBJOFE7BMVF
    UBLF3FUBJOFE7BMVF
    ͕ఏڙ͞
    Ε͍ͯΔ
    w SFUBJO
    SFMFBTF
    BVUPSFMFBTF
    ϝιου΋༻ҙ͞Εͯ
    Δ͚Ͳඇਪ঑

    View Slide

  29. $.4BNQMF#VGGFS
    $7*NBHF#V⒎FS3FGJNBHF#V⒎FS
    $.4BNQMF#V⒎FS(FU*NBHF#V⒎FS TBNQMF#V⒎FS

    WBSVONBOBHFE6ONBOBHFE$7*NBHF#V⒎FS
    $.4BNQMF#V⒎FS(FU*NBHF#V⒎FS TBNQMF#V⒎FS

    View Slide

  30. $.4BNQMF#VGGFS
    $7*NBHF#V⒎FS3FGJNBHF#V⒎FS
    $.4BNQMF#V⒎FS(FU*NBHF#V⒎FS TBNQMF#V⒎FS

    var anUnmanaged : Unmanaged =
    CMSampleBufferGetImageBuffer(sampleBuffer)
    var returnValue = anUnmanaged.takeUnretainedValue()
    var anOpaque = anUnmanaged.toOpaque()
    var pixelBuffer:CVPixelBuffer =
    Unmanaged.fromOpaque(anOpaque).takeUnretainedValue()

    View Slide

  31. 9DPEF#FUB൛Ͱͷ࿩Ͱ
    9$PEFͰࢼͨ͠Β
    গ͠ศརʹͳͬͯ·ͨ͠

    View Slide

  32. $.4BNQMF#VGGFS
    $7*NBHF#V⒎FS3FGJNBHF#V⒎FS
    $.4BNQMF#V⒎FS(FU*NBHF#V⒎FS TBNQMF#V⒎FS

    var anUnmanaged : Unmanaged =
    CMSampleBufferGetImageBuffer(sampleBuffer)
    var returnValue = anUnmanaged.takeUnretainedValue()
    var anOpaque = anUnmanaged.toOpaque()
    var pixelBuffer:CVPixelBuffer =
    CMSampleBufferGetImageBuffer(sampleBuffer)

    View Slide

  33. ͞Βʹ

    View Slide

  34. DPOWFSU
    GSPN$(*NBHF
    UP$71JYFM#VGGFS

    View Slide

  35. $71JYFM#VGGFS
    var unmanagedPixelBuffer:Unmanaged? = nil
    (snip…)
    var pixelBuffer:CVPixelBuffer =
    Unmanaged.takeUnretainedValue(unmanagedPix
    elBuffer!)()

    View Slide

  36. /// Get the value of this unmanaged reference as a managed
    /// reference and consume an unbalanced retain of it.
    ///
    /// This is useful when a function returns an unmanaged reference
    /// and you know that you're responsible for releasing the result.
    func takeRetainedValue() -> T
    4XJGU6ONBOFHFE
    /// Get the value of this unmanaged reference as a managed
    /// reference without consuming an unbalanced retain of it.
    ///
    /// This is useful when a function returns an unmanaged reference
    /// and you know that you're not responsible for releasing the result.
    func takeUnretainedValue() -> T

    View Slide

  37. 6ONBHFE5
    w UBLF6OSFUBJOFE7BMVF

    w SFUBJO͞Ε͍ͯͳ͍΋ͷΛฦ͢
    w SFMFBTF͢Δඞཁ͸ͳ͍ ௐࠪதʜ
    w UBLF3FUBJOFE7BMVF

    w SFUBJO͞Ε͍ͯΔ΋ͷฦ͢

    View Slide

  38. ·ͱΊ

    View Slide

  39. ·ͱΊ
    4XJGUҎલͷ࿩Ͱॲཧ
    ʹΑͬͯ͸௿ϨΠϠʔ
    ͷ஌ࣝ͸஌͓͔ͬͯͳ
    ͍ͱແཧɻɻɻɻ

    View Slide

  40. ·ͱΊ
    w ஌͓ͬͯ͘΂͖Ωʔϫʔυ
    w $PSF'PVOEBUJPO
    w 3FNBQQFE5ZQFT
    w 6ONBOBHFE0CKFDUT

    View Slide

  41. 5IBOLT
    IUUQTUBDLPWFSqPXDPNRVFTUJPOTTXJGUIPXEPZPVDBTUBDWJNBHFCV⒎FSSFGBTBDWQJYFMCV⒎FSSFG
    4XJGU)PXEPZPVDBTUB$7*NBHF#V⒎FS3FGBTB$71JYFM#V⒎FS3FG
    IUUQTEFWFMPQFSBQQMFDPNMJCSBSZQSFSFMFBTFJPTEPDVNFOUBUJPO$PSF.FEJB3FGFSFODF$.4BNQMF#V⒎FS
    BQQMF@SFGDGVOD$.4BNQMF#V⒎FS(FU*NBHF#V⒎FS
    $.4BNQMF#V⒎FS3FGFSFODF

    View Slide