NSString Helper Macros

Mac OSX specific forum
User avatar
mk-soft
Always Here
Always Here
Posts: 5335
Joined: Fri May 12, 2006 6:51 pm
Location: Germany

NSString Helper Macros

Post by mk-soft »

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.

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
My Projects ThreadToGUI / OOP-BaseClass / EventDesigner V3
PB v3.30 / v5.75 - OS Mac Mini OSX 10.xx - VM Window Pro / Linux Ubuntu
Downloads on my Webspace / OneDrive