先说结论:C#委托时同一方法可引用多次,取消引用时次数必须==引用的次数。比如:
void Start() {
//此处up和down分别被引用了两次。
cListDown += OnDownPage;
cListDown += OnDownPage;
cListUp += OnUpPage;
cListUp += OnUpPage;
}
void OnDestroy() {
//取消引用时也写了相应多的次数。
cListDown -= OnDownPage;
cListUp -= OnUpPage;
cListDown -= OnDownPage;
cListUp -= OnUpPage;
}
如此写才是正确的。如果取消引用时少写了一次,则会报以下错误。
09-08 16:45:29.396: I/Unity(4230): NullReferenceException
09-08 16:45:29.396: I/Unity(4230): at CommonListMove.OnDownPage () [0x00000] in <filename unknown>:0
09-08 16:45:29.396: I/Unity(4230): at (wrapper delegate-invoke) System.Action:invoke_void__this__ ()
09-08 16:45:29.396: I/Unity(4230): at (wrapper delegate-invoke) System.Action:invoke_void__this__ ()
09-08 16:45:29.396: I/Unity(4230): at (wrapper delegate-invoke) System.Action:invoke_void__this__ ()
09-08 16:45:29.396: I/Unity(4230): at SliderController.SlideAlgorithm () [0x00000] in <filename unknown>:0
09-08 16:45:29.396: I/Unity(4230): at SliderController.Update () [0x00000] in <filename unknown>:0
09-08 16:45:29.396: I/Unity(4230):
具体原因等项目结束以后再探究,总之现在知道取消引用次数少了会报错,项目中要注意一下这个问题,当然最好的情况是不要多次引用。