To 楼上各位 使用直接和Nil进行比较的唯一弊端就是自己要保证在每次释放对象后将对象指针清空,如果没有这个操作,得到的结果会发生错误,从而导致引用已经不存在的对象 不过,如果你的对象在创建的时候指定了Parent,那么个人认为在释放这个对象后没有必要再为其对应指针做清空处理,因为Parent已经做了这个事情!!!!
其实Assigned是一个magic函数,实际上 if not Assigned(ClassA) then ... 和 if ClassA <> nil then ... 是完全一样的,之所以有这个Assigned函数,主要是用在一些不方便直接使用 if ... <> nil then 的形式的情况下,例如 if OnClick <> nil then ... 这种形式会导致编译器误以为你要调用OnClick, 这时候使用Assigned就比较方便
搞错了if not Assigned(ClassA) then ... 和 if ClassA = nil then ... 是完全一样的,之所以有这个Assigned函数,主要是用在一些不方便直接使用 if ... = nil then 的形式的情况下,例如 if OnClick = nil then ... 这种形式会导致编译器误以为你要调用OnClick, 这时候使用Assigned就比较方便
ShowMessage('已经创建')
else
ShowMessage('还没有创建');另外,这个函数只上判断对象指针中是否包含了具体的内容!
if AObject<>nil then .....//AObject已经创建了
if ClassA <> nil then .........
如果直接用Assigned函数,Aobject一旦被创建,Assigned(Aobject):=True,无论是否
Aobject.free
而用if Aobject <> nil then .........,在Aobject.free后要设置为nil
看你的用法了,我的程序会动态Aobject.free,我用了后者,等于判断Aobject的状态。
Aobject <> nil 直接判断对象的指针
如果想用assigned进行判断,那么这个类释放的时候要object:=nil;或者直接用Freeandnil()释放并且赋值为nil
明明是对象要写成ClassA,为什么?ObjectA不失更好吗?
不好意思,初学
if not Assigned(ClassA) then ...
和
if ClassA <> nil then ...
是完全一样的,之所以有这个Assigned函数,主要是用在一些不方便直接使用
if ... <> nil then
的形式的情况下,例如
if OnClick <> nil then ...
这种形式会导致编译器误以为你要调用OnClick,
这时候使用Assigned就比较方便
和
if ClassA = nil then ...
是完全一样的,之所以有这个Assigned函数,主要是用在一些不方便直接使用
if ... = nil then
的形式的情况下,例如
if OnClick = nil then ...
这种形式会导致编译器误以为你要调用OnClick,
这时候使用Assigned就比较方便