use reference counting strategy like objective-c