OSDN Git Service

referenceCountを導入。今のところ正常に動作している。メモリリークについても一部改善。69.67KB(1852/2023)>36.59KB(588/2163)
[chnosproject/CHNOSProject.git] / CHNOSProject / chn / chnlib02.c
index 2671932..ba92bbd 100644 (file)
@@ -62,7 +62,9 @@ int CHNLIB_UIPArray_GetSeparatedStringByUIPArray(CHNLIB_UIPArray **separated, co
 {\r
     //listにある文字列でsを分割し、その結果をseparatedに追加する。\r
     //listに存在する文字列は新しくメモリを確保せず、リスト中のStringタグへのポインタをseparatedに記録する。\r
-    //従ってseparatedを解放する際は、listのdata32をすべてTrueにした上で、CHNLIB_UIPArray_FreeSelectedAllを利用するべきである。\r
+    ////従ってseparatedを解放する際は、listのdata32をすべてTrueにした上で、CHNLIB_UIPArray_FreeSelectedAllを利用するべきである。\r
+    //referenceCountは、list中の文字列は2以上になり、listにない文字列は1となる。\r
+    //従って、separatedをreleaseすれば、安全に解放できる。\r
     //listにない文字列はdata32==False(0)\r
     //listにある文字列はdata32==tag->data32\r
     int index, end, end_end, location;\r
@@ -79,14 +81,14 @@ int CHNLIB_UIPArray_GetSeparatedStringByUIPArray(CHNLIB_UIPArray **separated, co
             //もうリストの文字列はない\r
             if(end != end_end){\r
                 //でもまだ文字列は残っている\r
-                CHNLIB_UIPArray_AppendLast(separated, False, CHNLIB_String_ExtractByLength(s, end, CHNLIB_MAX_STRING_LENGTH));\r
+                CHNLIB_UIPArray_AppendLast(separated, False, autorelease(CHNLIB_String_ExtractByLength(s, end, CHNLIB_MAX_STRING_LENGTH)));\r
             }\r
             break;\r
         }\r
         //リストの文字列が見つかった\r
         if(location != 0){\r
             //リストの文字列の前に、リストにない文字列がある\r
-            CHNLIB_UIPArray_AppendLast(separated, False, CHNLIB_String_ExtractByLength(s, end, location));\r
+            CHNLIB_UIPArray_AppendLast(separated, False, autorelease(CHNLIB_String_ExtractByLength(s, end, location)));\r
             end += location;\r
         }\r
         CHNLIB_UIPArray_AppendLast(separated, CHNLIB_UIPArray_GetData32ByIndex(list, index), CHNLIB_UIPArray_GetPointerByIndex(list, index));\r
@@ -116,7 +118,7 @@ int CHNLIB_UIPArray_GetSeparatedUTF8Character(CHNLIB_UIPArray **separated, const
             //終端文字\r
             break;\r
         }\r
-        CHNLIB_UIPArray_AppendLast(separated, u, CHNLIB_String_ExtractByLength(s, (int)(p - p_base), (int)(q - p)));\r
+        CHNLIB_UIPArray_AppendLast(separated, u, autorelease(CHNLIB_String_ExtractByLength(s, (int)(p - p_base), (int)(q - p))));\r
         p = q;\r
     }\r
     \r