1

私はこの答えを探すのにかなりの時間を費やしましたが、私が光を見るのを妨げているのは私の初心者のステータスであると推定しています.

UIScrollView無限ページャーにするためにサブクラス化しています。その一環として、メモリを節約するために一度に 3 つの「ページ」のみを使用するつもりであるため、新しいページがいつ表示されるかを確認する必要があります。つまり、サブクラスもデリゲートとして機能させる必要があります。

https://stackoverflow.com/a/9986842/773329の指示に従いました。しかし、私はいくつかの奇妙な(私にとって)問題に直面しています。

ここでの主なものはsetDelegate:(id<UIScrollViewDelegate>)、ユーザーのデリゲートを挿入するためにオーバーライドすると、終了しないアセンブリ内のループが発生することです。

-(void)setDelegate:(id<UIScrollViewDelegate>)delegate {
    _selfDelegate->_userDelegate = delegate;
    super.delegate = nil;
    super.delegate = (id)_selfDelegate;
}

アセンブリ:

libobjc.A.dylib`objc_release:
0x12be090:  pushl  %ebp
0x12be091:  movl   %esp, %ebp
0x12be093:  subl   $8, %esp
0x12be096:  calll  0x12be09b                 ; objc_release + 11
0x12be09b:  popl   %ecx
0x12be09c:  movl   8(%ebp), %eax
0x12be09f:  testl  %eax, %eax
0x12be0a1:  je     0x12be0d5                 ; objc_release + 69
0x12be0a3:  movl   (%eax), %edx              ; <<< This is where the loop is
0x12be0a5:  movl   16(%edx), %edx
0x12be0a8:  andl   $-4, %edx
0x12be0ab:  testb  $2, 2(%edx)
0x12be0af:  je     0x12be0c5                 ; objc_release + 53
0x12be0b1:  movl   1002149(%ecx), %ecx
0x12be0b7:  movl   %ecx, 4(%esp)
0x12be0bb:  movl   %eax, (%esp)
0x12be0be:  calll  0x12bd08c                 ; objc_msgSend
0x12be0c3:  jmp    0x12be0d5                 ; objc_release + 69
0x12be0c5:  movl   %eax, (%esp)
0x12be0c8:  movl   $0, 4(%esp)
0x12be0d0:  calll  0x12bf9d0                 ; -[NSObject release]
0x12be0d5:  addl   $8, %esp
0x12be0d8:  popl   %ebp
0x12be0d9:  ret    

問題を引き起こしている可能性のあるものはありますか?

4

2 に答える 2

2

あなたがしていることに基づいて、あなたがUICollectionView達成したいことに完全に適合すると思います。これにより、ビューを再利用するための独自のコードを作成する必要がなくなり、パフォーマンスの高いコードを作成するために必要なその他の作業が不要になります。

UICollectionView リファレンス

于 2013-05-04T16:08:30.037 に答える