关于释放对象以后为什么要=nil

本文介绍了Objective-C中释放对象的一种常见做法:先调用release方法,随后将指针设为nil,以避免后续误用已释放对象的问题。此外,文章还讨论了不同场景下是否需要将指针置nil的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有些时候释放对象是这样写的

 [ptr release];

ptr = nil;

这是为什么呢?


如果要重复使用同一个指针*ptr,

在释放掉上一个对象以后,

最好是ptr = nil一下,

这样可以避免在if (ptr)的时候出现返回值是YES的错误。

如果不是重复使用的话,那就没必要= nil了。


==============2/18 update==============

另外推荐一种安全的写法,保证内存不出问题,点击阅读

#============================================================================== # ■ Main #------------------------------------------------------------------------------ #  各定义结束后、从这里开始实际处理。 #============================================================================== begin #-------------------------------------------------------------------------- # ● 载入数据包和资源列表 #-------------------------------------------------------------------------- @a = 0 #$resource_list = load_data("resource_list.inf") #$data_package = File.open("data_package.dat","rb") # 设置系统默认字体 窗口长度 = 985 Font.default_name = ["宋体"] viewport = Viewport.new(0,0,940,480)#窗口长度 viewport.z = 200 #帮助信息底框 $message_sprite_background = Sprite.new(viewport) $message_sprite_background.blend_type = 0 $message_sprite_background.x = 0 $message_sprite_background.y = 348 $message_sprite_background.visible = true #帮助信息画面 $message_sprite = Sprite.new(viewport) $message_sprite.bitmap = Bitmap.new(965,480) $message_sprite.x = 650#7 $message_sprite.y = 5 $message_sprite.z = 999999999 $message_sprite.visible = true $message_sprite.bitmap.font.size = 15 $message_sprite.bitmap.font.name = ["宋体"] $message_sprite.bitmap.font.color.set(255,255,255,255) Graphics.freeze # 生成场景对像 (标题画面) $scene = Scene_Title.new # $scene 为有效的情况下调用 main 过程 while $scene != nil $scene.main if $scene.is_a?(Scene_Map) or $scene.is_a?(Scene_Battle) if $message_sprite_background.bitmap == nil $message_sprite_background.bitmap= Bitmap.new("Graphics/UI/当前")#("Graphics/Windowskins/message4") $message_sprite_background.y = 480-30 end if $scene.is_a?(Scene_Battle) if @a != 1 $message_sprite_background.bitmap = Bitmap.new("Graphics/UI/当前") $message_sprite_background.y = 480-30 @a = 1 end else @a = 0 end $message_sprite_background.visible = true $message_sprite.visible = true else $message_sprite_background.visible = false $message_sprite.visible = false end end # 淡入淡出 Graphics.transition(20) rescue Errno::ENOENT # 补充 Errno::ENOENT 以外错误 # 无法打开文件的情况下、显示信息后结束 filename = $!.message.sub("No such file or directory - ", "") print("找不到文件 #{filename}。 ") rescue Hangup p "由于内存不足,游戏退出" ensure #$data_package.close end #============================================================================== # ★ 结束 ★ #==============================================================================
最新发布
07-02
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值