Verwenden von NSGlyph und Speicherzuweisung
in einer Methode zum Verfolgen von Zeilenumbrüchenhäufig, Für einNSTextView visibleRect
Ich reserviere Speicher fürNSGlyph benutzenNSLayoutManager getGlyphs:range:
.
sollte / kann ich herausfinden, wie viel Speicher dies sein sollte, da ich eine Referenz für den Bereich habe (ohne das Layout zu beeinflussen), und auch, welche Art von Bereinigung passieren sollte - ausgeführt mitBOGEN ?
der Code (der in einer Hauptwarteschlange läuft):
NSLayoutManager *lm = [self.textView layoutManager];
NSTextContainer *tc = [self.textView textContainer];
NSRect vRect = [self.textView visibleRect];
NSRange visibleRange = [lm glyphRangeForBoundingRectWithoutAdditionalLayout:vRect inTextContainer:tc];
NSUInteger vRangeLoc = visibleRange.location;
NSUInteger numberOfLines;
NSUInteger index;
NSGlyph glyphArray[5000]; // <--- memory assigned here
NSUInteger numberOfGlyphs = [lm getGlyphs:glyphArray range:visibleRange];
NSRange lineRange;
NSMutableIndexSet *idxset = [NSMutableIndexSet indexSet];
for (numberOfLines = 0, index = 0; index < numberOfGlyphs; numberOfLines++) {
(void)[lm lineFragmentRectForGlyphAtIndex:index effectiveRange:&lineRange withoutAdditionalLayout:YES];
[idxset addIndex:lineRange.location + vRangeLoc];
index = NSMaxRange(lineRange);
}
self.currentLinesIndexSet = idxset;