support arc and non-arc