作者回复: 你打卡打的真心不错!
作者回复: 1 应该释放,你没有看到释放,是因为在它继承的父类中:
MessageToMessageDecoder#channelRead
try {
decode(ctx, cast, out);
} finally {
ReferenceCountUtil.release(cast);
}
2 没有效果,因为它的实现是这样的:
if (msg instanceof ReferenceCounted) {
return ((ReferenceCounted) msg).release();
}
好处就是不用管这些细致末节了,直接release,需要release的会释放,不需要的(没有实现ReferenceCounted)不释放。所以对我们来说省心友好。
作者回复: 是的,因为finally语句中会尝试释放,但是肯定不执行释放因为释放的时候会判断:
public static boolean release(Object msg) {
if (msg instanceof ReferenceCounted) {
return ((ReferenceCounted) msg).release();
}
return false;
}