我先说内存如何管理才是规范的:当你需要对象a被b强引用时,要确保b是不被释放的。而你之前的代码中a是request,b是栈,栈退出时栈释放了,却没有减少request的强引用数(没在栈上release),虽可能工作正常,却是一种不规矩的做法。无论c、c++还是objc,规矩的做法都是“确保强引用的责任人和释放的责任人”是一个,所谓解铃还需系铃人。
开了ARC后你还是可以理解成栈在强引用request,栈释放后request也被release。我建议之前运行完美的代码不改ARC也可以,编译选项加-fno-objc-arc。想改的话把强引用者改为对象,即在成员变量中声明ASIHTTPRequest *_request; 然后在栈空间使用成员变量。
楼主需要理解的不仅是ARC如何用,而是c中malloc、free如何用。知道malloc和free什么时候该用,就知道什么时候改retain或release。手动内存管理意识是java或其他弱类型语言转业者需要培养的。
若对象未声明weak,则默认strong。声明的位置就是retain的位置:在栈上声明Class a,栈就对a持有强引用;b的成员变量声明Class a,b就对a持有强引用。
祝楼主好运