Tôi có một số mã trong ứng dụng của tôi trông giống như thế này:Tại sao Cocoa thỉnh thoảng trả về một chuỗi rỗng?
char *hash = (char*) sqlite3_column_text(get_bookmark, 0);
NSString* postHash = [NSString stringWithUTF8String:hash];
này làm việc cho tôi mỗi lần; Tôi chưa bao giờ thấy nó không phải là hoạt động. Hầu hết người dùng của tôi không gặp sự cố (theo như tôi biết). Tuy nhiên tôi thấy rằng postHash
là một chuỗi rỗng (@""
) đối với một số người dùng một số thời gian.
Mọi người có thể giải thích lý do không?
Một số ngữ cảnh/đầu cơ khác:
Điều này dường như chỉ xảy ra trên các thiết bị cầm tay bị bẻ khóa. Có điều gì khác về họ không? Tôi thu thập rằng thường có ít bộ nhớ hơn. Bất cứ thứ gì khác có thể đóng góp ở đây?
postHash
được sử dụng trong ô bảng và đôi khi được cho là được điền chính xác vì vậy tôi tự tin rằng cơ sở dữ liệu gọi nên hoạt động. Trong thực tế, nếu cơ sở dữ liệu cũng có một chuỗi rỗng thì đó là vì một đoạn mã rất giống nhau nên câu hỏi vẫn còn.
hash
chắc chắn sẽ trở lại với giá trị không NULL. Nếu tôi buộc một NULL ở đây, ứng dụng bị treo. Tương tự, postHash
không phải là nil
vì điều đó cũng sẽ làm hỏng ứng dụng (vì lý do tương tự).
Tôi nghĩ rằng điều này có thể liên quan đến bộ nhớ. Nếu phương pháp cố phân bổ quá nhiều bộ nhớ trước khi -didReceiveMemoryWarning
có thể được gọi là điều gì sẽ xảy ra? Tôi biết rằng, tại một số thời điểm, Springboard đẩy ứng dụng ra. Nhưng có thể là Cocoa trả về một chuỗi rỗng ở đây thay vì giá trị mong đợi? Tôi đã nghe nói về một vài báo cáo rằng, theo như tôi có thể nói, chỉ có thể đã được gây ra bởi một chuỗi rỗng đang có mặt, nơi một cái gì đó còn nên có mặt.
Bất kỳ suy đoán, lý thuyết hoặc ý tưởng nào khác đều được chào đón.
“Nhưng có thể Cocoa trả về một chuỗi rỗng ở đây chứ không phải giá trị mong đợi?” “Chuỗi rỗng” sẽ là NULL (chuỗi C) hoặc nil (NSString).Một chuỗi rỗng là hoàn toàn khác nhau: đó là một chuỗi không có ký tự trong nó, trong khi NULL/nil là không có chuỗi nào cả. –
Đó không phải là sự hiểu biết của tôi về "chuỗi rỗng" là gì. Khi tôi nói "chuỗi rỗng" ở trên, tôi có nghĩa là "chuỗi rỗng", nghĩa là @ "" trong Mục tiêu-C hoặc "" trong C. Giá trị nil/NULL khiến ứng dụng gặp sự cố. –
"Null" có nghĩa là 0. Ký tự null là '\ 0'; tức là, 0. Con trỏ null là 0. Không có thứ gì như là một "chuỗi rỗng" trong C, bởi vì nếu nó là null, nó không phải là một chuỗi; nó chỉ 0. –