Using CFRetain/CFRelease instead of _selfCopy to keep itself alive.

Also splited the tests in 3 test cases