NSString Helper Macros
Posted: Tue Aug 23, 2022 4:53 pm
Various macros for NSString to choose from.
If you need an NSString over several EventLoop, you can also create the NSString with CFStringCreate(...) and release it later, because PB's EventLoop uses an NSAutoreleasePool.
If you need an NSString over several EventLoop, you can also create the NSString with CFStringCreate(...) and release it later, because PB's EventLoop uses an NSAutoreleasePool.
Code: Select all
;-TOP my mk-soft, v1.01.0, 23.08.2022
ImportC "-framework CoreFoundation"
CFStringCreateWithCharacters(alloc, chars, numChars) ; chars = unichar
CFRelease(ref)
EndImport
Macro CFStringCreate(String)
CFStringCreateWithCharacters(0, @String, Len(String))
EndMacro
; ----
Macro CocoaString(NSString)
PeekS(CocoaMessage(0, NSString, "UTF8String"), -1, #PB_UTF8)
EndMacro
Macro CocoaString2(NSString)
PeekS(CocoaMessage(0, NSString, "cStringUsingEncoding:", #NSUnicodeStringEncoding))
EndMacro
Macro NSStringCreate(String)
CocoaMessage(0, 0, "NSString stringWithString:$", @String)
EndMacro
Macro NSStringCreate2(String)
CocoaMessage(0, 0, "NSString stringWithCharacters:", @String, "length:", Len(String)) ; String = unichar
EndMacro
Macro NSStringCreate3(String)
CocoaMessage(0, 0, "NSString stringWithBytes:", @String, "length:", StringByteLength(String), "encoding:", #NSUTF16LittleEndianStringEncoding)
EndMacro
; ----
CompilerIf #PB_Compiler_IsMainFile
NSPool = CocoaMessage(0, 0, "NSAutoreleasePool new") ; make threadsafe ifs use
sVal.s = "Hello World! "
NSString1 = NSStringCreate(sVal)
NSString2 = NSStringCreate2(sVal)
NSString3 = NSStringCreate3(sVal)
NSString4 = CFStringCreate(sVal)
Debug "1: " + CocoaString(NSString1)
Debug "2: " + CocoaString2(NSString2)
Debug "3: " + CocoaString(NSString3)
Debug "4: " + CocoaString2(NSString4)
CocoaMessage(0, NSPool, "release")
CFRelease(NSString4)
CompilerEndIf